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

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

[复制链接]
奇迹 发布时间:2021-10-20 18:11
题目起跟上一篇很接近啊。本文主要说的就是安全区的代码怎么去操作非安全区的资源。( R/ g  ~. |) h% w6 Q( ]
安全区可以操作非安全区资源,安全区可以调用非安全区的代码。
8 |+ J3 G, w: x. D5 i6 H工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。& P+ e8 Z' v% t" |3 M) l" m
QQ截图20211009123622.png - o" d& r, `' ]; R, E; G
首先我们试一下直接操作寄存器,接着上次的程序来。
& V, U( J/ `- ]+ Y这次程序是非安全区调用安全区代码,然后安全区代码操作非安全区的小灯,嗯,听起来很绕。
* s, C! f0 }* s5 k/ s9 V) }$ a非安全区 main函数里8 _' h# S+ S' E+ d
  1. /* USER CODE BEGIN WHILE */+ Z/ i; O# T& G
  2.   while (1)
    ( e( C6 q: Q' i% N
  3.   {
    - \. ?% A. }5 A, D5 H" B" n$ ?
  4.       LED_toggle_S();1 m. n) Z9 D" x1 _
  5.       HAL_Delay(1000);9 U' p( X4 x- A/ P. J9 `( r5 w' V
  6.     /* USER CODE END WHILE */
    1 Z2 |- }3 v, z  C

  7. ( ?; {  p  M; s4 U7 n* U: o9 u% ?
  8.     /* USER CODE BEGIN 3 */
    5 B/ d7 k- n' t( e
  9.   }
    7 q& Y$ I1 Z* M* I1 R5 y
  10.   /* USER CODE END 3 */
复制代码

9 a3 B: B: Y- u( s1 ~8 v- Z9 Q安全区代码
2 B. l9 ]: c/ C9 V
  1. void LED_toggle_S(void) CMSE_NS_ENTRY
    ( T1 `. |2 A6 @  V' m) w
  2. {) }4 S6 W/ C2 z2 U7 P7 j
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);5 F2 n3 j8 _9 C$ b5 K0 H
  4. }
复制代码
; T9 F$ \- k5 ]% x) ^7 I- `. ~
编译下载,红灯开始正常闪烁。+ r8 Q  L; r. ~# V, I+ ~1 T
一切正常。
( j5 {* E' _: T. p! C( r6 t- c( D' Y接下来是安全区代码调用非安全区函数,好像有点怪,如果安全区代码调用非安全区代码,同时非安全区代码也调用安全区代码,是不是就出现互相依赖的问题了?所以它并不是直接调用的函数,因为安全区代码对非安全区所有的资源都有操作权限,那我就直接操作地址就好了啊,直接访问非安全区代码的地址,调用它(实际使用中还需要点修饰)。接着刚才的程序。
2 Z0 L. h( V- j; C6 [5 j& D非安全区
3 Q0 P7 @- N2 v6 |' i
  1. void LED_toggle_NS(void) __attribute((section(".ARM.__at_0x8101000")));
      n8 T0 A3 Z, a# M

  2. 6 A5 f0 e  r7 N* t
  3. void LED_toggle_NS(void)
    . g8 d9 p8 Y# g' H, `
  4. {* p# z8 G; A, M
  5.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);: H$ P$ _4 E3 K& S& c, G2 U
  6. }
复制代码
' B- W; N$ g) W0 j, ?
非安全区 main函数里% Z  m; m& I* c- J2 {2 R9 m
  1. /* USER CODE BEGIN WHILE */' U1 j6 D) r+ |! g
  2.   while (1)+ [: i4 q2 [7 {1 c8 s
  3.   {! X% R& \, z4 ]1 w5 t
  4.       LED_toggle_S();
    ' }3 B. G: b; y- W, y7 Y" o
  5.       HAL_Delay(1000);6 j  G9 _4 s# X- F. [6 h
  6.     /* USER CODE END WHILE */) G# G* p( K' A4 h3 B" S
  7. ! V/ @' A2 V4 E
  8.     /* USER CODE BEGIN 3 */* i0 ^: G# o- }, P1 ^
  9.   }1 x8 I" y' A3 t" M
  10.   /* USER CODE END 3 */
    2 h( n; f4 G/ e: I4 }
复制代码

& t+ C+ O* F; a& [创建一个操作小灯的代码,并编译到0x8101000地址上。* S8 U3 Z+ {" q* R9 ^! F4 C
安全区代码
8 M6 u0 r, C( V6 W: z+ l
  1. void LED_toggle_S(void) CMSE_NS_ENTRY
    ' ?$ j8 L0 h/ `! }8 P/ D' U0 Q1 ?
  2. {* ~( O! V: e: {  }& k+ ~
  3.   funcptr_NS LED_toggle_NS;( d5 `  f: Y6 C# X
  4.   LED_toggle_NS = (funcptr_NS)0x8101000;6 u( r9 @! k0 j. w+ c% o+ q
  5.   LED_toggle_NS();# x9 o) `6 k4 n
  6. }
复制代码

+ ^7 U! ~2 x- q) c4 q就是调用了非安全区的程序,嗯,这是一个非安全区代码调用安全区代码,然后安全区代码调用非安全区代码,然后通过操作非安全区程序控制小灯,嗯,绕口令越来越熟练了。$ E1 a& O5 H" r. q+ q
编译下载,红灯开始正常闪烁。" t8 }- e' G2 |/ e0 J
3 D* J- j0 Y7 ]+ d, N( ~: C9 g
funcptr_NS 是ST给我们提供的一个定义好的接口,不光上面一种写法。
& w7 r( b. D) M4 ~/ s" k
( w" {) `4 u3 k% B4 t; _$ m善良守序
' P9 _3 ]0 Y1 e0 R# G5 n- t
  1. funcptr_NS LED_toggle_NS;
    * ^# e5 q; U: r. c, P
  2. LED_toggle_NS = (funcptr_NS)0x8101000;
    5 L$ E+ ?0 @3 A$ \- o
  3. LED_toggle_NS();
复制代码

% Y$ j: c& K$ J& l' Q2 E" s绝对中立
1 n+ Z- f- M- S" _
  1. ((funcptr_NS)0x8101000)();
复制代码

: A4 v$ t) r5 z混乱邪恶* R+ N  Y& [( i  ^
  1. ((void __attribute((cmse_nonsecure_call))(*)(void))0x8101000)();
复制代码
# X6 w, ?$ E: `: T, R: u2 |
全展开确实太刺激了点,哈哈。1 q, y9 y0 L5 e

$ o; \( ^- E2 e
收藏 1 评论11 发布时间:2021-10-20 18:11

举报

11个回答
liuxingkeji 回答时间:2021-10-27 10:13:09
学习学习) C( D8 I! x$ K, ~1 ]& _( Q4 Q
昱枫 回答时间:2021-10-27 10:19:54
学习学习# K, k8 G9 Q) C6 L; A  C3 u/ ?
joshua天宇 回答时间:2021-10-27 10:26:15
不错,学习学习% R2 @" N2 V% P+ N) ?3 ]! [
wudianjun2001 回答时间:2021-10-27 10:28:42
学习学习,大神很牛" I# b4 Y8 p' `3 U
zhangt0713 回答时间:2021-10-27 10:41:06
善良守序、绝对中立、混乱邪恶  期待你的展开; q* S" h; _; J; O1 g7 G0 t
QIANYING79 回答时间:2021-10-27 14:31:39
打卡打卡, i& i2 A1 F3 ~% h% i3 z" L
moluxiyan 回答时间:2021-10-27 16:25:42
很绕 得多看几遍2 y) R1 U1 e( i: P: r# u
orima 回答时间:2021-10-27 21:58:08
学习了,很详细。感谢!8 ]3 t9 n2 n0 z' I! ~
qiangtech 回答时间:2021-10-28 09:55:04
确实让人有点绕和混乱啊,要实际操作理解一下。3 R! U" O% Z  g( J4 |% Y4 k
EricCheng 回答时间:2021-10-28 22:34:34
绕晕了,要实际操作才更清晰
" Q/ b6 C8 |( f: v
BEEE 回答时间:2021-10-28 23:45:31
想赶快使用ST新推出这款STM32U5系列产品,学习学习; @! a, d6 Z4 A% ~6 ^
8 ~+ D3 O( K2 \

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版