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

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

[复制链接]
奇迹 发布时间:2021-10-20 18:11
题目起跟上一篇很接近啊。本文主要说的就是安全区的代码怎么去操作非安全区的资源。7 c; l# R5 f1 N
安全区可以操作非安全区资源,安全区可以调用非安全区的代码。; Q# ]& @3 a; e+ u0 S
工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。
& @) a: _- d% l: B- Y QQ截图20211009123622.png
4 h) u% @4 t' L  O: f; C首先我们试一下直接操作寄存器,接着上次的程序来。
* J' @  A7 s1 S$ `5 D1 `2 _6 v& @这次程序是非安全区调用安全区代码,然后安全区代码操作非安全区的小灯,嗯,听起来很绕。
& b4 Y) l: H; r# z% d非安全区 main函数里% \5 H' J3 }/ n2 z5 L+ {7 j4 N) j) F8 i
  1. /* USER CODE BEGIN WHILE */
    ( `* P/ g: o! r
  2.   while (1), h9 j+ P1 V2 Q0 [: E& @* d0 T
  3.   {8 Z) \, _! L  J8 h
  4.       LED_toggle_S();
    $ R" |& V! J( @5 T; S* I- P. h5 @
  5.       HAL_Delay(1000);
    % I9 @+ M# W. p1 W2 V5 P
  6.     /* USER CODE END WHILE */) R, a5 U3 Z/ Y, A0 C2 x
  7. 0 K/ v1 ]) m- O
  8.     /* USER CODE BEGIN 3 */
    & c! Y* b2 L$ B  M. `9 H
  9.   }# c- b- Q  i' `. p
  10.   /* USER CODE END 3 */
复制代码

7 D% U( w6 s( c6 v6 h安全区代码
+ l2 y$ r/ j. G' G. g( E( C/ {
  1. void LED_toggle_S(void) CMSE_NS_ENTRY 4 j5 a' w- Q4 ]; k/ G
  2. {
    ( A  J8 d; G1 p5 j( B
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);
    8 a6 o/ E9 X( {: `
  4. }
复制代码
/ q  n+ Q& g) j# F3 S# r' k
编译下载,红灯开始正常闪烁。7 _5 m4 d/ W6 C0 q* Q, b
一切正常。
0 h" Q. L) k: N接下来是安全区代码调用非安全区函数,好像有点怪,如果安全区代码调用非安全区代码,同时非安全区代码也调用安全区代码,是不是就出现互相依赖的问题了?所以它并不是直接调用的函数,因为安全区代码对非安全区所有的资源都有操作权限,那我就直接操作地址就好了啊,直接访问非安全区代码的地址,调用它(实际使用中还需要点修饰)。接着刚才的程序。
) e  b3 _) k; V. M. V; c7 [% T# ^非安全区6 I1 P) ?' b) v" v8 }# D# D
  1. void LED_toggle_NS(void) __attribute((section(".ARM.__at_0x8101000")));6 \* E  A! @4 G* T7 S( n+ j
  2. : m/ o( x) k8 O& y9 _6 x
  3. void LED_toggle_NS(void): E1 R+ U( }& P5 S2 o4 ?
  4. {- _8 q  ^) q4 a9 B+ ^; h) m- I
  5.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);4 F+ Q. J' z; \& Y% b
  6. }
复制代码

( g4 N& U0 v2 o6 A& ]. \非安全区 main函数里
  v9 }  F+ U$ x* w
  1. /* USER CODE BEGIN WHILE */
    ( v! W7 }1 k/ t2 V3 Y- n
  2.   while (1); z* `% S2 @' K) N- q
  3.   {* _, l( J9 |/ Q  P  F" O/ ^) z( _! J
  4.       LED_toggle_S();% A/ ?; f' A9 E5 H: [8 v
  5.       HAL_Delay(1000);: l1 l8 V- \6 P  G; L
  6.     /* USER CODE END WHILE */
    0 Y+ V3 a: N% o  [0 @* V% p
  7. 5 L0 [# r* L6 ]( x* J# |( Z' u
  8.     /* USER CODE BEGIN 3 */0 u  P0 w: K2 t& f
  9.   }
    + [1 A' \6 a4 x1 y& M2 q2 E' f
  10.   /* USER CODE END 3 */
    ; L& ?# p6 p& g/ a
复制代码
& W" L6 l, P, M
创建一个操作小灯的代码,并编译到0x8101000地址上。
& ?4 m4 n# U1 \- n( R/ M" g安全区代码( b) Y6 K  D6 c. r; ~3 ~/ a
  1. void LED_toggle_S(void) CMSE_NS_ENTRY$ R/ |& H/ T, s8 R7 _6 W) i3 v( i, u
  2. {+ }( y/ t7 M9 |
  3.   funcptr_NS LED_toggle_NS;
    ( _8 ~; j* D+ B; m) L; g8 T& X
  4.   LED_toggle_NS = (funcptr_NS)0x8101000;
    & B3 x1 h9 X! q' D! k4 I9 L
  5.   LED_toggle_NS();
    4 l, x- {) _5 e
  6. }
复制代码

( w7 f! s' x- i$ w' j; v" {* L就是调用了非安全区的程序,嗯,这是一个非安全区代码调用安全区代码,然后安全区代码调用非安全区代码,然后通过操作非安全区程序控制小灯,嗯,绕口令越来越熟练了。# y+ L, `: R+ c9 {/ Z
编译下载,红灯开始正常闪烁。$ y$ A6 G8 S) J: O" F
& o/ e2 ?0 N) C
funcptr_NS 是ST给我们提供的一个定义好的接口,不光上面一种写法。
; n4 t. j' ]& z: ]( c& f/ N& c3 t; |' S
善良守序. v% g# B1 {2 n5 ?
  1. funcptr_NS LED_toggle_NS;
    - c% S  F; d$ h, U
  2. LED_toggle_NS = (funcptr_NS)0x8101000;. c2 k3 B" B* K! {
  3. LED_toggle_NS();
复制代码

& b8 I1 A3 l  z3 D5 O6 J) L绝对中立8 h6 F: P# u2 [' [
  1. ((funcptr_NS)0x8101000)();
复制代码
. C3 |& l! ~% j! P: K- n
混乱邪恶
' U% ~8 p" W; E- p
  1. ((void __attribute((cmse_nonsecure_call))(*)(void))0x8101000)();
复制代码
/ G. ]6 F% o* I3 L  @! i  W1 o
全展开确实太刺激了点,哈哈。
+ i! X* x8 e* k/ `6 |3 w

* d6 O6 m1 t/ f
收藏 1 评论11 发布时间:2021-10-20 18:11

举报

11个回答
liuxingkeji 回答时间:2021-10-27 10:13:09
学习学习
, b8 u, Y) Q8 j
昱枫 回答时间:2021-10-27 10:19:54
学习学习
9 t- b* O! S; K/ ~( }) J' v# _
joshua天宇 回答时间:2021-10-27 10:26:15
不错,学习学习
! B4 h* u4 P5 o
wudianjun2001 回答时间:2021-10-27 10:28:42
学习学习,大神很牛6 S, V6 T8 ^- Q: X* S* l# P
zhangt0713 回答时间:2021-10-27 10:41:06
善良守序、绝对中立、混乱邪恶  期待你的展开/ `) A0 h! @4 M  U) z6 P
QIANYING79 回答时间:2021-10-27 14:31:39
打卡打卡
# O6 o4 O) m+ j" O
moluxiyan 回答时间:2021-10-27 16:25:42
很绕 得多看几遍
6 T( M  B, Y( q, t* o9 }
orima 回答时间:2021-10-27 21:58:08
学习了,很详细。感谢!4 p- _5 {# X( P- k9 g  ^
qiangtech 回答时间:2021-10-28 09:55:04
确实让人有点绕和混乱啊,要实际操作理解一下。
; @' w( {( h# d. o
EricCheng 回答时间:2021-10-28 22:34:34
绕晕了,要实际操作才更清晰
9 ?$ ]% B( f# J/ M1 e) Q1 k, m
BEEE 回答时间:2021-10-28 23:45:31
想赶快使用ST新推出这款STM32U5系列产品,学习学习) ?9 U( M, d" ]) q/ p0 O
+ m5 x# l% z& ~9 b& I4 {% g! K

所属标签

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