现在的位置: 首页 > 综合 > 正文

ucos(三)—临界段

2013年09月18日 ⁄ 综合 ⁄ 共 930字 ⁄ 字号 评论关闭

#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值)

抱歉!评论已关闭.