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

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

[复制链接]
奇迹 发布时间:2021-10-20 18:11
题目起跟上一篇很接近啊。本文主要说的就是安全区的代码怎么去操作非安全区的资源。3 P6 r% T2 y  @. z6 d7 L8 f
安全区可以操作非安全区资源,安全区可以调用非安全区的代码。
' p$ A6 I9 U. n$ ~0 I0 l# n1 }工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。
' o- E6 P4 P4 d# Y. d2 c1 S' l QQ截图20211009123622.png , W  P2 v9 K" R, D8 S( T3 A
首先我们试一下直接操作寄存器,接着上次的程序来。0 Z, E5 _! P+ t$ y( B
这次程序是非安全区调用安全区代码,然后安全区代码操作非安全区的小灯,嗯,听起来很绕。2 ]5 }$ ~* Q( W
非安全区 main函数里* f: V, [* N- X0 Q( g$ w% P9 r
  1. /* USER CODE BEGIN WHILE */
    ) A* T- ^& J% i5 t& M
  2.   while (1)& ^8 @) s: o/ L! `. g) X
  3.   {3 d4 J# j3 }& X. @$ @/ ~, M4 R
  4.       LED_toggle_S();
    # L' ]- m3 Y& k% e( L( r+ I$ j% G$ F' R
  5.       HAL_Delay(1000);/ K# |$ n& ?$ b8 @+ `+ \- H
  6.     /* USER CODE END WHILE */
    - b; D2 @9 I2 S0 w5 a( a1 l$ C
  7. 0 A$ a5 x! \; }9 y# R
  8.     /* USER CODE BEGIN 3 */  S3 E& R3 ~: @1 U$ }
  9.   }
    1 X! q! }& J9 u+ f7 ~
  10.   /* USER CODE END 3 */
复制代码

" ^% ?1 P* r. T! y9 D7 p安全区代码4 M( ?$ P, H$ ~' g2 x- t1 i# Q$ D! w5 R
  1. void LED_toggle_S(void) CMSE_NS_ENTRY
    " a% M2 o/ Y4 Y& p
  2. {
    ! h; R& E% v" f  P/ t4 M/ C
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);
    1 D4 n; z. d7 n; y& p, P& `# D
  4. }
复制代码

; x! T" n: W" {+ C+ q编译下载,红灯开始正常闪烁。
& P5 k6 O3 m9 i" l" f4 ~一切正常。
* J0 Z9 a; f; Z+ E* k4 h- M接下来是安全区代码调用非安全区函数,好像有点怪,如果安全区代码调用非安全区代码,同时非安全区代码也调用安全区代码,是不是就出现互相依赖的问题了?所以它并不是直接调用的函数,因为安全区代码对非安全区所有的资源都有操作权限,那我就直接操作地址就好了啊,直接访问非安全区代码的地址,调用它(实际使用中还需要点修饰)。接着刚才的程序。
# @, p2 A5 Y2 m. b9 D非安全区
" ?5 Y1 o4 W4 G# N0 \% w
  1. void LED_toggle_NS(void) __attribute((section(".ARM.__at_0x8101000")));8 H9 s" B2 m6 B- u% i
  2. ; H4 Z5 a* Z; r, [, {5 Q' R
  3. void LED_toggle_NS(void)" P  h. [2 y5 _$ [/ k# t4 x, d; s
  4. {/ e& J: c7 W$ G# w2 t
  5.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);9 c/ `  Y( |7 s
  6. }
复制代码
( v+ T6 m4 d. _  h& A
非安全区 main函数里
) x) v# W$ c) E& e
  1. /* USER CODE BEGIN WHILE */
    2 ?; ^& K3 J7 i! E1 ~
  2.   while (1)) D2 T: G2 h* }) Z# y7 k1 k
  3.   {
    8 v, ?; e! W% _
  4.       LED_toggle_S();1 J9 b5 v# A  q* Z- d
  5.       HAL_Delay(1000);
    $ F) d7 j" n- Y& y$ Z1 m
  6.     /* USER CODE END WHILE */
    + h; S5 N# D2 e
  7. 8 h4 w" G- D! C) z. E7 y
  8.     /* USER CODE BEGIN 3 */
    9 U/ I  c- D& x0 a
  9.   }- u* O) U1 I+ p% v) ]4 ?
  10.   /* USER CODE END 3 */" F" Q, A) q$ V" K# y8 T( B$ S
复制代码
# l4 ^: ]$ T' U% Q2 p+ J- _
创建一个操作小灯的代码,并编译到0x8101000地址上。
- }" t# _9 k+ q# `7 x安全区代码
! m/ @9 c3 @9 b% Q+ W5 z0 Z
  1. void LED_toggle_S(void) CMSE_NS_ENTRY, x4 n/ U9 F* L$ V* W4 i7 A1 K2 S
  2. {
    ; x! |% ?- i2 e" l! ^9 X6 s  Y* x
  3.   funcptr_NS LED_toggle_NS;5 Q; g  P  G( b4 O  i
  4.   LED_toggle_NS = (funcptr_NS)0x8101000;4 d# `/ T+ N, i: {( h* p+ Y/ Q
  5.   LED_toggle_NS();" C. r0 S) D2 X" _% H
  6. }
复制代码
8 M/ u: L1 T& h0 H
就是调用了非安全区的程序,嗯,这是一个非安全区代码调用安全区代码,然后安全区代码调用非安全区代码,然后通过操作非安全区程序控制小灯,嗯,绕口令越来越熟练了。. [6 a/ G6 F, L
编译下载,红灯开始正常闪烁。, D, Z4 |; A( f& p6 Y, @& L7 d$ [

) l- ?% o8 u0 K6 z; B, Sfuncptr_NS 是ST给我们提供的一个定义好的接口,不光上面一种写法。6 I9 d" w5 f! ?* {! [4 }* L& l/ e
" D# \- l) o3 B* |; n
善良守序. |" S% w% |( e
  1. funcptr_NS LED_toggle_NS;7 s$ k2 ?8 f4 Z+ t; F" r
  2. LED_toggle_NS = (funcptr_NS)0x8101000;# C- v7 J# D! P- `
  3. LED_toggle_NS();
复制代码

& ^1 P! m; M; v7 }5 y! Z绝对中立
% m" T8 p) r" y# ?- A* F% P; H
  1. ((funcptr_NS)0x8101000)();
复制代码
9 G& q. d" r, \! w$ Q) h; ?
混乱邪恶
, b% y1 T- `3 r0 S0 o& N( ~
  1. ((void __attribute((cmse_nonsecure_call))(*)(void))0x8101000)();
复制代码
/ z% n4 y* \9 y- i
全展开确实太刺激了点,哈哈。; I8 p0 {! P/ A7 k, J& w+ ?

3 `4 K5 f; X7 W
收藏 1 评论11 发布时间:2021-10-20 18:11

举报

11个回答
liuxingkeji 回答时间:2021-10-27 10:13:09
学习学习$ F4 A5 T) f* p* M+ n
昱枫 回答时间:2021-10-27 10:19:54
学习学习: x  G3 _5 y9 W
joshua天宇 回答时间:2021-10-27 10:26:15
不错,学习学习: ]9 \( ]' _% m* P$ y3 l6 G
wudianjun2001 回答时间:2021-10-27 10:28:42
学习学习,大神很牛
4 D6 M$ u1 Z- k, U5 u" r3 Y
zhangt0713 回答时间:2021-10-27 10:41:06
善良守序、绝对中立、混乱邪恶  期待你的展开$ S$ M7 s' A& m, K/ m
QIANYING79 回答时间:2021-10-27 14:31:39
打卡打卡1 |; O! [( j4 Y- E7 U
moluxiyan 回答时间:2021-10-27 16:25:42
很绕 得多看几遍. X8 [0 L& r0 z8 k  Y6 p
orima 回答时间:2021-10-27 21:58:08
学习了,很详细。感谢!
9 _6 r: ~' `& p
qiangtech 回答时间:2021-10-28 09:55:04
确实让人有点绕和混乱啊,要实际操作理解一下。
* e: |. d& e5 A. z: [" _
EricCheng 回答时间:2021-10-28 22:34:34
绕晕了,要实际操作才更清晰, d+ |" X* G4 I' e: Q
BEEE 回答时间:2021-10-28 23:45:31
想赶快使用ST新推出这款STM32U5系列产品,学习学习
4 R- z. K; r4 B' E
" [" M2 O* u2 v/ C# l

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版