
题目起得跟绕口令一样,转来转去。本文主要说的就是非安全的代码怎么去操作安全区的资源。 非安全区不能操作安全区资源,不过非安全区可以调用安全区允许的代码。9 Z$ Q0 S- B4 T5 [/ H v$ e4 K* f4 ^0 C* F& _/ y( t 工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。9 p8 Q# l! h& |" v" R% H( B7 i ![]() 首先我们试一下直接操作寄存器(这样是不行滴)。8 D0 R0 q6 v0 Z7 t( _ 非安全区 main函数里, c/ u; L7 f2 m6 v$ u. g
编译下载到芯片,不能运行,说明非安全区代码是不能直接操作安全区资源的。 正统的方式是使用函数的方式调用。而且这个函数不是普通函数(肯定的,毕竟是俩工程)。需要使用__attribute((cmse_nonsecure_entry)) 进行修饰(不修饰的话,编译都过不了)。# f% ^7 \6 N: r }5 r- @1 Q3 d3 D( Y 重新写一下代码; I& x. Q6 }6 m" ?5 {* J; E 安全区+ W1 e [ w/ e2 X
这里的CMSE_NS_ENTRY 与 __attribute((cmse_nonsecure_entry)) 是等价的。如果追求严谨的话,可以把这个函数定义到secure_nsc.c里面,并在secure_nsc.h做声明,声明时只需像普通函数一样即可,即void LED_toggle_S(void);% X7 Z$ B$ X. N3 Z: N* V 1 V+ S0 c1 L/ h, S/ ], I 非安全区 main函数里 W4 m: R. ?- X! \( s, l, d( d9 X% K
编译下载,绿灯开始正常闪烁。: w& ^+ {5 u2 q, K. C 注:因为非安全区可以调用安全区允许的代码,所以,编译的时候建议先编译安全区的程序,再编译非安全区的程序。& y; r; o% D+ B/ f9 o |
不错的指导例程,没关注U5的测评消息,错过了试用申请& c3 w p0 c$ P; }$ V5 g |
意味着,写代码都要在线又安全区的方式调用一次 |
工程实例挺好,说明的挺清晰,那之后操作安全区是不是麻烦点7 c7 u. d# K: b/ a! K |
![]() |
有安全区的概念了,很不错' ]6 x; `/ B7 r: | |
学习了 谢谢3 ?7 {6 P/ X+ k. Z3 E! H |
学习了,很详细。感谢大神分享。2 w" \8 o" o+ _! h$ } |
很详细的帖子,学习了/ `' v& C' P* Z- Q7 E" w |
说的很清晰 |
|
解释得很清楚调用的关系。 |
总感觉操作起来比较麻烦9 D( _5 q# v+ n9 N( O |
想赶快使用ST新推出这款STM32U5系列产品,学习学习![]() |