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

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

[复制链接]
奇迹 发布时间:2021-10-20 18:11
题目起跟上一篇很接近啊。本文主要说的就是安全区的代码怎么去操作非安全区的资源。
安全区可以操作非安全区资源,安全区可以调用非安全区的代码。
工程设置跟上一个一样,还是俩小灯,PH6属于非安全区资源,PH7属于安全区资源。
QQ截图20211009123622.png
首先我们试一下直接操作寄存器,接着上次的程序来。
这次程序是非安全区调用安全区代码,然后安全区代码操作非安全区的小灯,嗯,听起来很绕。
非安全区 main函数里
  1. /* USER CODE BEGIN WHILE */
  2.   while (1)
  3.   {
  4.       LED_toggle_S();
  5.       HAL_Delay(1000);
  6.     /* USER CODE END WHILE */

  7.     /* USER CODE BEGIN 3 */
  8.   }
  9.   /* USER CODE END 3 */
复制代码

安全区代码
  1. void LED_toggle_S(void) CMSE_NS_ENTRY
  2. {
  3.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);
  4. }
复制代码

编译下载,红灯开始正常闪烁。
一切正常。
接下来是安全区代码调用非安全区函数,好像有点怪,如果安全区代码调用非安全区代码,同时非安全区代码也调用安全区代码,是不是就出现互相依赖的问题了?所以它并不是直接调用的函数,因为安全区代码对非安全区所有的资源都有操作权限,那我就直接操作地址就好了啊,直接访问非安全区代码的地址,调用它(实际使用中还需要点修饰)。接着刚才的程序。
非安全区
  1. void LED_toggle_NS(void) __attribute((section(".ARM.__at_0x8101000")));

  2. void LED_toggle_NS(void)
  3. {
  4.     HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);
  5. }
复制代码

非安全区 main函数里
  1. /* USER CODE BEGIN WHILE */
  2.   while (1)
  3.   {
  4.       LED_toggle_S();
  5.       HAL_Delay(1000);
  6.     /* USER CODE END WHILE */

  7.     /* USER CODE BEGIN 3 */
  8.   }
  9.   /* USER CODE END 3 */
复制代码

创建一个操作小灯的代码,并编译到0x8101000地址上。
安全区代码
  1. void LED_toggle_S(void) CMSE_NS_ENTRY
  2. {
  3.   funcptr_NS LED_toggle_NS;
  4.   LED_toggle_NS = (funcptr_NS)0x8101000;
  5.   LED_toggle_NS();
  6. }
复制代码

就是调用了非安全区的程序,嗯,这是一个非安全区代码调用安全区代码,然后安全区代码调用非安全区代码,然后通过操作非安全区程序控制小灯,嗯,绕口令越来越熟练了。
编译下载,红灯开始正常闪烁。

funcptr_NS 是ST给我们提供的一个定义好的接口,不光上面一种写法。

善良守序
  1. funcptr_NS LED_toggle_NS;
  2. LED_toggle_NS = (funcptr_NS)0x8101000;
  3. LED_toggle_NS();
复制代码

绝对中立
  1. ((funcptr_NS)0x8101000)();
复制代码

混乱邪恶
  1. ((void __attribute((cmse_nonsecure_call))(*)(void))0x8101000)();
复制代码

全展开确实太刺激了点,哈哈。

收藏 1 评论11 发布时间:2021-10-20 18:11

举报

11个回答
liuxingkeji 回答时间:2021-10-27 10:13:09
学习学习
昱枫 回答时间:2021-10-27 10:19:54
学习学习
joshua天宇 回答时间:2021-10-27 10:26:15
不错,学习学习
wudianjun2001 回答时间:2021-10-27 10:28:42
学习学习,大神很牛
zhangt0713 回答时间:2021-10-27 10:41:06
善良守序、绝对中立、混乱邪恶  期待你的展开
QIANYING79 回答时间:2021-10-27 14:31:39
打卡打卡
moluxiyan 回答时间:2021-10-27 16:25:42
很绕 得多看几遍
orima 回答时间:2021-10-27 21:58:08
学习了,很详细。感谢!
qiangtech 回答时间:2021-10-28 09:55:04
确实让人有点绕和混乱啊,要实际操作理解一下。
VegardCheng 回答时间:2021-10-28 22:34:34
绕晕了,要实际操作才更清晰
BEEE 回答时间:2021-10-28 23:45:31
想赶快使用ST新推出这款STM32U5系列产品,学习学习

所属标签

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