OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4092|回复: 1

STM32的原子操作怎么写?

[复制链接]

41

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
626
金钱
626
注册时间
2016-12-16
在线时间
222 小时
发表于 2017-10-11 10:06:11 | 显示全部楼层 |阅读模式
1金钱


void system_set_exec_alarm(uint8_t code) {
  uint8_t sreg = SREG;
  cli();
  sys_rt_exec_alarm = code;
  SREG = sreg;
}
上面的这个函数的意思是不是这样
把状态寄存器的数据保存到sreg这里。
然后关全局中断的函数cli();
变量赋值
还原状态寄存器的值
这个过程就是个 保存现场——执行原子操作——恢复现场 的过程,无论之前是否 I 置位,都不会发生错误或影响。
上面的函数是在AVR中实现的原子操作。
请问STM32F4中要实现这个操作怎么写

https://shop298719590.taobao.com/
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

41

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
626
金钱
626
注册时间
2016-12-16
在线时间
222 小时
 楼主| 发表于 2017-10-12 09:46:39 | 显示全部楼层
这是UCOS的做法
OS_CPU_SR_Save
    MRS     R0, PRIMASK          ;读取PRIMASK到R0,R0为返回值
    CPSID   I                                RIMASK=1,关中断(NMI和硬件FAULT可以响应)
    BX      LR                            ;返回

OS_CPU_SR_Restore
    MSR     PRIMASK, R0                   ;读取R0到PRIMASK中,R0为参数
    BX      LR                                ;返回
https://shop298719590.taobao.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-18 22:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表