奇迹
发布时间:2021-10-17 17:34
|
题目起得跟绕口令一样,转来转去。本文主要说的就是非安全的代码怎么去操作安全区的资源。; X3 y$ w9 c: U 非安全区不能操作安全区资源,不过非安全区可以调用安全区允许的代码。* Z c; ^. H, p3 x! }1 g 工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。* z: e6 u$ I. J* R) o/ y* t7 ~
首先我们试一下直接操作寄存器(这样是不行滴)。 非安全区 main函数里 _( q; Y, O+ ?$ S0 H7 H1 [
编译下载到芯片,不能运行,说明非安全区代码是不能直接操作安全区资源的。 正统的方式是使用函数的方式调用。而且这个函数不是普通函数(肯定的,毕竟是俩工程)。需要使用__attribute((cmse_nonsecure_entry)) 进行修饰(不修饰的话,编译都过不了)。 重新写一下代码 安全区) R5 u. l" P0 ~# V7 I1 n
这里的CMSE_NS_ENTRY 与 __attribute((cmse_nonsecure_entry)) 是等价的。如果追求严谨的话,可以把这个函数定义到secure_nsc.c里面,并在secure_nsc.h做声明,声明时只需像普通函数一样即可,即void LED_toggle_S(void);" e+ r# T( P) d$ t 非安全区 main函数里' I8 H- ~. t7 e0 q0 z
编译下载,绿灯开始正常闪烁。+ e$ ]1 r8 F3 f 注:因为非安全区可以调用安全区允许的代码,所以,编译的时候建议先编译安全区的程序,再编译非安全区的程序。 |
微信公众号
手机版
+ n0 E& R3 a" A6 w9 }* U