
题目起得跟绕口令一样,转来转去。本文主要说的就是非安全的代码怎么去操作安全区的资源。 非安全区不能操作安全区资源,不过非安全区可以调用安全区允许的代码。 工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。 ![]() 首先我们试一下直接操作寄存器(这样是不行滴)。 非安全区 main函数里
编译下载到芯片,不能运行,说明非安全区代码是不能直接操作安全区资源的。 正统的方式是使用函数的方式调用。而且这个函数不是普通函数(肯定的,毕竟是俩工程)。需要使用__attribute((cmse_nonsecure_entry)) 进行修饰(不修饰的话,编译都过不了)。 重新写一下代码 安全区
这里的CMSE_NS_ENTRY 与 __attribute((cmse_nonsecure_entry)) 是等价的。如果追求严谨的话,可以把这个函数定义到secure_nsc.c里面,并在secure_nsc.h做声明,声明时只需像普通函数一样即可,即void LED_toggle_S(void); 非安全区 main函数里
编译下载,绿灯开始正常闪烁。 注:因为非安全区可以调用安全区允许的代码,所以,编译的时候建议先编译安全区的程序,再编译非安全区的程序。 |
不错的指导例程,没关注U5的测评消息,错过了试用申请 |
意味着,写代码都要在线又安全区的方式调用一次 |
工程实例挺好,说明的挺清晰,那之后操作安全区是不是麻烦点 |
![]() |
有安全区的概念了,很不错 |
学习了 谢谢 |
学习了,很详细。感谢大神分享。 |
很详细的帖子,学习了 |
说的很清晰 |
|
解释得很清楚调用的关系。 |
总感觉操作起来比较麻烦 |
想赶快使用ST新推出这款STM32U5系列产品,学习学习![]() |