uc/os-ii开关中断

本文详细介绍了在STM32F103上移植uC/OSII时,如何使用第三种方法管理中断,即保存中断状态到变量,然后关闭中断。通过分析底层汇编代码,解释了为何要将PRIMASK寄存器的值保存在变量中,以适应不同长度的返回值和参数传递规则。
摘要由CSDN通过智能技术生成

ucos是利用禁止中断来保护临界段的。
ucos给我们提供了三种方法:
一:直接关中断和直接开中断。
二:先把原来的中断状态压入栈中,然后再关闭中断。恢复时直接从栈中返回原来存储的中断状态。
三:先保存原来的中断状态到一个变量中,然后再关闭中断。

在STM32F103上移植uC/OSII采用第三种方法,代码如下:

#if OS_CRITICAL_METHOD == 3
#define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}
#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}
#endif

再来看底层的汇编代码

OS_CPU_SR_Save
    MRS     R0, PRIMASK
    ; Set prio int m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值