ucos(三)---临界段

#define  OS_CRITICAL_METHOD    3      //

 


#define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save(); }         

                     
#define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr)}
                      

OS_ENTER_CRITICAL() 

...................................... //临界区(中断被屏蔽,避免有其他任务或中断进入临界区)

OS_EXIT_CRITICAL()  

 

 

例如函数 OS_CPU_SR OS_CPU_SR_Save(void);   // 函数在汇编实现,用EXPORT关键字在C调用

 

C代码

 OS_CPU_SR  OS_CPU_SR_Save(void); 

 

汇编代码

EXPORT  OS_CPU_SR_Save               ;

OS_CPU_SR_Save
        MRS     R0,CPSR                     ; Set IRQ and FIQ bits in CPSR to disable all interrupts
        ORR     R1,R0,#NO_INT
        MSR     CPSR_c,R1                  ; 关IRQ和FIQ中断
        MRS     R1,CPSR                     ; Confirm that CPSR contains the proper interrupt disable flags
        AND     R1,R1,#NO_INT
        CMP     R1,#NO_INT
        BNE     OS_CPU_SR_Save              ; Not properly disabled (try again)
        BX      LR                                        ; 函数返回,根据规则返回值在R0中(RO中保存关中断前CPSR值)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值