你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

B-U585I-IOT02A--6.TrustZone安全区操作非安全区资源点灯

[复制链接]
奇迹 发布时间:2021-10-20 18:11
题目起跟上一篇很接近啊。本文主要说的就是安全区的代码怎么去操作非安全区的资源。" A( p: G# |9 D* {* S3 C
安全区可以操作非安全区资源,安全区可以调用非安全区的代码。
1 N/ p5 o6 h  d* t! H& b& {. I工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。
. U8 \! Z3 ^, s( O9 B QQ截图20211009123622.png
7 |. c; i3 n- p- P首先我们试一下直接操作寄存器,接着上次的程序来。$ v  U3 T4 ^7 g8 v) M4 t$ A" o
这次程序是非安全区调用安全区代码,然后安全区代码操作非安全区的小灯,嗯,听起来很绕。
& {  h2 |0 d# J6 P' C非安全区 main函数里
& r8 [5 V* A9 L( j+ s" z
  1. /* USER CODE BEGIN WHILE */
    ! f6 p; e' `* B# _
  2.   while (1)
    ; F- L, {4 a! U) |9 W- Q4 i2 t
  3.   {
    ! e+ o0 [: F% Z
  4.       LED_toggle_S();+ z- _7 w, q8 z
  5.       HAL_Delay(1000);
    / g% K/ W8 c* z% ~- p
  6.     /* USER CODE END WHILE */
    8 h0 F% o, F7 f) U9 J0 h

  7. 4 P& r2 q: v3 N2 S3 j
  8.     /* USER CODE BEGIN 3 */
    / w' G5 l4 W: i' e
  9.   }* o: _* K+ q' n
  10.   /* USER CODE END 3 */
复制代码
8 B1 R( \, c$ M0 E, n
安全区代码2 C* n( y9 n$ [# `" j$ e9 B
  1. void LED_toggle_S(void) CMSE_NS_ENTRY 0 C5 t+ p- U( d4 G; t
  2. {% r5 B! V8 r+ N: j5 y( e/ l
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);: Y. c4 f+ O/ i- `1 K
  4. }
复制代码
9 h. D% n! \3 d
编译下载,红灯开始正常闪烁。
7 @( R- Q2 s/ }2 U) W% g一切正常。
" r- [/ h+ J# V$ w- M. R接下来是安全区代码调用非安全区函数,好像有点怪,如果安全区代码调用非安全区代码,同时非安全区代码也调用安全区代码,是不是就出现互相依赖的问题了?所以它并不是直接调用的函数,因为安全区代码对非安全区所有的资源都有操作权限,那我就直接操作地址就好了啊,直接访问非安全区代码的地址,调用它(实际使用中还需要点修饰)。接着刚才的程序。; ~, E; o! {) q
非安全区' B4 s5 p9 N4 ~
  1. void LED_toggle_NS(void) __attribute((section(".ARM.__at_0x8101000")));3 Z! N* c: D6 X" J+ D9 g

  2.   w# A2 Z5 [, H6 T( C
  3. void LED_toggle_NS(void)
    7 B) O: w1 ^1 P2 S6 r" S
  4. {
    2 S4 ]  ^* W% O
  5.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);
    ) {+ O8 b# f( P6 X2 y% [
  6. }
复制代码
1 |* w: \7 b! I6 O: T2 G! G
非安全区 main函数里
2 }. w- n: D7 [3 i
  1. /* USER CODE BEGIN WHILE */% Z# G. [( G0 j
  2.   while (1)
    7 c- O1 q8 q  Y; ^6 P- W1 s
  3.   {
    ' `) F2 {1 h+ I. Y7 j
  4.       LED_toggle_S();4 t" Z! F' b4 i" B
  5.       HAL_Delay(1000);1 `' h) ?4 P" {! \# F
  6.     /* USER CODE END WHILE */5 H" k) g7 ]  V) q) p! N2 N; X
  7. ! J8 b9 U' B# k* z. i
  8.     /* USER CODE BEGIN 3 */
    ! U7 W  i+ A2 e7 ]9 l
  9.   }  Q, W; E/ `( Q+ }) y6 Q, ~
  10.   /* USER CODE END 3 */
    , l6 Y$ o$ K" ]0 |3 h
复制代码

1 A- A7 l( l$ f+ y* {2 M创建一个操作小灯的代码,并编译到0x8101000地址上。) x1 X8 u9 ^0 s1 N& Z  O' K
安全区代码
3 s1 F4 J+ S$ d
  1. void LED_toggle_S(void) CMSE_NS_ENTRY
    8 h1 V4 @- Y. C4 ?4 c  c3 ]0 Y
  2. {
    $ z) U8 k$ {, N8 ^1 t3 V! Z0 M
  3.   funcptr_NS LED_toggle_NS;
    . N, m0 |3 t' F7 D' E: x) _+ `
  4.   LED_toggle_NS = (funcptr_NS)0x8101000;* R; }8 c- S% y$ M; a# C
  5.   LED_toggle_NS();% J. W& w4 T4 @9 \9 R4 A
  6. }
复制代码

2 }. |3 g" V+ B就是调用了非安全区的程序,嗯,这是一个非安全区代码调用安全区代码,然后安全区代码调用非安全区代码,然后通过操作非安全区程序控制小灯,嗯,绕口令越来越熟练了。
8 I1 H5 L4 N/ V5 z/ x( l: K编译下载,红灯开始正常闪烁。  s$ L) ~) H* u0 N8 n) D

! J3 B, d, c' t# ^. ofuncptr_NS 是ST给我们提供的一个定义好的接口,不光上面一种写法。
1 E* p/ x! N* U) J1 R5 t! t5 }; {# M. ]% {3 L4 R, u
善良守序
; B. B- _) r2 q) S, b
  1. funcptr_NS LED_toggle_NS;
    ' M0 f4 Z4 c' M3 u7 }
  2. LED_toggle_NS = (funcptr_NS)0x8101000;
    9 n0 g8 g/ N# i& y5 ?6 X& e$ J' p
  3. LED_toggle_NS();
复制代码
" w' ~' u  w6 y/ I
绝对中立' x7 J8 p& l- g6 \4 V: @6 o
  1. ((funcptr_NS)0x8101000)();
复制代码
% G" N4 Z2 l! F, f
混乱邪恶
9 @: e; f0 |9 J: p8 a
  1. ((void __attribute((cmse_nonsecure_call))(*)(void))0x8101000)();
复制代码

5 _4 p7 r3 g$ k( V% {全展开确实太刺激了点,哈哈。
3 R/ |6 `7 U5 L) J& g, g3 }

) `) G2 F8 Y0 Z3 \) G9 a3 S! T
赞 收藏 1 评论11 发布时间:2021-10-20 18:11

举报

11个回答
liuxingkeji 回答时间:2021-10-27 10:13:09
学习学习
6 z3 D; V  R' A* e5 c
昱枫 回答时间:2021-10-27 10:19:54
学习学习
) o9 z8 `$ ], H, k1 i# k4 U3 x
joshua天宇 回答时间:2021-10-27 10:26:15
不错,学习学习
* N* j& b! W0 v- ~9 Z
wudianjun2001 回答时间:2021-10-27 10:28:42
学习学习,大神很牛: k7 K) u$ q! H3 O- S
zhangt0713 回答时间:2021-10-27 10:41:06
善良守序、绝对中立、混乱邪恶  期待你的展开
( X. Y5 d- [* |* C# M$ x
QIANYING79 回答时间:2021-10-27 14:31:39
打卡打卡: N, {7 i0 L7 p
moluxiyan 回答时间:2021-10-27 16:25:42
很绕 得多看几遍/ P5 g: q% x' H5 y+ Y6 {0 P
orima 回答时间:2021-10-27 21:58:08
学习了,很详细。感谢!+ O! g2 T; e: b* V  W" q9 ~- H
qiangtech 回答时间:2021-10-28 09:55:04
确实让人有点绕和混乱啊,要实际操作理解一下。8 T6 Z& H& H0 A
VegardCheng 回答时间:2021-10-28 22:34:34
绕晕了,要实际操作才更清晰
# F7 b" X1 `. T6 X& f2 V. k" b( V
BEEE 回答时间:2021-10-28 23:45:31
想赶快使用ST新推出这款STM32U5系列产品,学习学习8 i5 [: ?. e, |( [0 i& ]1 s% [$ V

9 @3 d* H" ~4 v! O; M, }& r! ]
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版