STM32的原子操作怎么写?

2019-07-20 11:36发布



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中要实现这个操作怎么写

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
五花肉老乌龟
1楼-- · 2019-07-20 12:35
这是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                                ;返回

一周热门 更多>