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

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

[复制链接]
奇迹 发布时间:2021-10-20 18:11
题目起跟上一篇很接近啊。本文主要说的就是安全区的代码怎么去操作非安全区的资源。' u" N9 ~+ w% Q2 y! d
安全区可以操作非安全区资源,安全区可以调用非安全区的代码。; P8 ^) Z: v- o$ _4 ?
工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。  \. B8 p, }0 q% d
QQ截图20211009123622.png 5 Z( }3 k0 z1 D3 s" n' Q* u$ L
首先我们试一下直接操作寄存器,接着上次的程序来。1 T+ _, X; K; Q. [- q
这次程序是非安全区调用安全区代码,然后安全区代码操作非安全区的小灯,嗯,听起来很绕。! h. j. k% }0 P! l
非安全区 main函数里
' s' X; {/ \/ w7 V9 V
  1. /* USER CODE BEGIN WHILE */3 p' N& X0 J& M4 k0 E+ `
  2.   while (1)
    4 B' s  A1 q# r" [$ P
  3.   {& ]! P$ P: }7 e% U  C7 x
  4.       LED_toggle_S();8 t* ~+ [6 L+ g2 y4 ~
  5.       HAL_Delay(1000);
    + k, n. C' z. u6 L# ?2 r# l% E3 }
  6.     /* USER CODE END WHILE */5 D, t) N" Y1 {. s; F6 u; x+ v( w9 H
  7. $ i- ]* @/ Q0 {0 X7 v) j& Z; X
  8.     /* USER CODE BEGIN 3 */3 N6 @6 u8 I0 }- k
  9.   }- T9 p" C5 q- y  m* }$ c3 Z5 S
  10.   /* USER CODE END 3 */
复制代码

, m  s  [9 M6 N0 x$ i安全区代码+ R& S2 Y% h8 |1 l
  1. void LED_toggle_S(void) CMSE_NS_ENTRY
    # x7 Y$ i8 O% R" |; z/ E9 Q
  2. {
    5 c! Z4 m7 x8 i' e7 k* b
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);$ l5 i! ~+ N) R& M
  4. }
复制代码

) }" Z" a  b* Z6 l- j编译下载,红灯开始正常闪烁。
9 }, a8 Q+ i% F一切正常。
9 k# c) ]! ]4 C1 o接下来是安全区代码调用非安全区函数,好像有点怪,如果安全区代码调用非安全区代码,同时非安全区代码也调用安全区代码,是不是就出现互相依赖的问题了?所以它并不是直接调用的函数,因为安全区代码对非安全区所有的资源都有操作权限,那我就直接操作地址就好了啊,直接访问非安全区代码的地址,调用它(实际使用中还需要点修饰)。接着刚才的程序。
/ F/ W2 r/ C& a+ C" U7 z非安全区8 Q; V, ~9 s" F; m1 l
  1. void LED_toggle_NS(void) __attribute((section(".ARM.__at_0x8101000")));
    + e2 }- [0 P+ _' J) P
  2. ( Q- @2 [; F7 D" G/ H
  3. void LED_toggle_NS(void)& F( R; n6 Q% O
  4. {+ a. @, Z( |4 ]) C3 p$ O  s
  5.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);. W' u2 T! R) G- S. l7 }) H
  6. }
复制代码
9 X0 N. V. y7 x0 j" v, b$ p6 p
非安全区 main函数里/ y: L4 @  [( c! b5 X
  1. /* USER CODE BEGIN WHILE */
    0 ~% l: e# n; |" N
  2.   while (1)
    6 e' b8 F; X0 G2 n! n7 ]1 n5 j2 k
  3.   {
    6 ^- }- }; a/ y/ P* O
  4.       LED_toggle_S();
    $ F8 d/ B3 G% `$ F6 r* S. t
  5.       HAL_Delay(1000);$ @2 X& `, V/ g7 N
  6.     /* USER CODE END WHILE */2 c2 r; p' I/ s3 K
  7. 0 u, L. E9 e8 k1 o- ]
  8.     /* USER CODE BEGIN 3 */
    7 P8 u  L- o- U6 Z
  9.   }
    5 g  A4 g& H6 Z$ o) l: r) ~
  10.   /* USER CODE END 3 */
    3 r+ ~2 a9 _6 h7 w: N7 H
复制代码

9 q$ V4 T* Z3 `* Q! ]/ g创建一个操作小灯的代码,并编译到0x8101000地址上。  \! K( \" }2 ^4 p( I6 }5 N
安全区代码
% J4 a3 n; A' n* B
  1. void LED_toggle_S(void) CMSE_NS_ENTRY
    % F- U5 Z! \( w/ \
  2. {
    4 T7 h# _' ~) X! U$ U( m4 D9 I3 q9 v" O
  3.   funcptr_NS LED_toggle_NS;
    % W3 H; g+ E2 g6 u4 z
  4.   LED_toggle_NS = (funcptr_NS)0x8101000;
    , _# ^7 J9 d: ~# N1 S2 H
  5.   LED_toggle_NS();
    8 F, z4 A  o* e
  6. }
复制代码
# s9 @( M. C! z3 x. f
就是调用了非安全区的程序,嗯,这是一个非安全区代码调用安全区代码,然后安全区代码调用非安全区代码,然后通过操作非安全区程序控制小灯,嗯,绕口令越来越熟练了。
% J( D, q* p' t. h7 z$ N编译下载,红灯开始正常闪烁。2 F: H  A1 m1 M  t( m
! Y; R/ j) K! J& f/ }
funcptr_NS 是ST给我们提供的一个定义好的接口,不光上面一种写法。
: d! I1 F9 m9 J% [- l: O9 Z( n: t4 C9 W6 N3 i; W
善良守序
3 b$ l' e0 |( H/ F3 d: M. ~
  1. funcptr_NS LED_toggle_NS;
    , `2 o0 X+ K7 w2 p
  2. LED_toggle_NS = (funcptr_NS)0x8101000;
    $ a+ z  Q: @" w) F# X9 k4 I, n. e- V
  3. LED_toggle_NS();
复制代码
$ j0 i- D( q9 o0 `" Y# D! H% E! a
绝对中立, J) a7 d2 L1 j7 E9 |
  1. ((funcptr_NS)0x8101000)();
复制代码

& @5 F, \+ Y3 B& U/ H. G混乱邪恶
" q$ K6 c( }, f0 X# {, f" _
  1. ((void __attribute((cmse_nonsecure_call))(*)(void))0x8101000)();
复制代码
5 K: @3 ?' b% Y3 M; ^% j
全展开确实太刺激了点,哈哈。
, X! \$ I5 w) n- b

  B7 k/ ], W# Z. R
收藏 1 评论11 发布时间:2021-10-20 18:11

举报

11个回答
liuxingkeji 回答时间:2021-10-27 10:13:09
学习学习6 X9 O% W) F9 m, N, `
昱枫 回答时间:2021-10-27 10:19:54
学习学习$ k) ?! _3 U, E( l8 ?# h
joshua天宇 回答时间:2021-10-27 10:26:15
不错,学习学习$ ^. _1 t* }7 K
wudianjun2001 回答时间:2021-10-27 10:28:42
学习学习,大神很牛5 ^7 F; E8 ^7 T! s* x6 L- _
zhangt0713 回答时间:2021-10-27 10:41:06
善良守序、绝对中立、混乱邪恶  期待你的展开1 E+ j) {6 b9 E: R3 y! o' i7 S$ H
QIANYING79 回答时间:2021-10-27 14:31:39
打卡打卡* R" D9 C1 e! s3 ~
moluxiyan 回答时间:2021-10-27 16:25:42
很绕 得多看几遍
# Q$ z7 B! g/ p/ S7 E% h4 \
orima 回答时间:2021-10-27 21:58:08
学习了,很详细。感谢!6 O. j2 `$ u: A: P3 G
qiangtech 回答时间:2021-10-28 09:55:04
确实让人有点绕和混乱啊,要实际操作理解一下。* ~. i5 q2 ]: u0 v# Y7 k" |1 ^
VegardCheng 回答时间:2021-10-28 22:34:34
绕晕了,要实际操作才更清晰
1 g) |+ z6 \. P9 L, d
BEEE 回答时间:2021-10-28 23:45:31
想赶快使用ST新推出这款STM32U5系列产品,学习学习
. O. |. z3 l" c
( @7 W/ y8 C  _: o- L

所属标签

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