uc/os中断处理

//c语言,基于x86处理器的uc/os-II开中断和关中断的洪定义
#if OS_CRITICAL_METHOD==1
#define OS_ENTER_CRITICAL() asm CLI;
#define OS_EXIT_CRITICAL() asm STI;
#endif

#if OS_CRITICAL_METHOD==2
#define OS_ENTER_CRITICAL() asm {PUSHF;CLI}
#define OS_EXIT_CRITICAL() asm POPF
#endif


#if OS_CRITICAL_METHOD==3
#define OS_ENTER_CRITICAL() asm (cpu_sr=OSCPUSaveSR())
#define OS_EXIT_CRITICAL() asm (OSCPURestoreSR(cpu_sr))
#endif


//基于ARM 处理器的ucos-ii开中断和关中断洪定义由C 和汇编语言两部分组成
#define OS_CPU-SR unsigned long
#define os_ENTER_CRITICAL() {cpu_sr=INTS_OFF())
#define OS_EXIT_CRITICAL() (if(cpu_sr==0) INTS_ON();}

;;;===OS_CPU_A.S汇编程序部分===
EXPORT INTS_OFF
EXPORT INTS_ON
INTS_OFF
mrs ro,cpsr; CPSR的值送人R0
mov r1,r0; R0的值备份R1
orr r1,r1,#0xC0 R1的bit7和bit6置1
msr CPSR_cxsf,r1 将R1存入CPSR
and r0,r0,#0x80 R0保存了IRQ原状态
mov pc,lr 返回
INTS_ON
mrs r0,cpsr CPSR的值存入R0
bic r0,r0,#0x80 清除IRQ标志
msr CPSR_cxsf,r0 IRQ使能
mov pc,lr 返回


//ucos-ii进入和退出临界区的范例
void OSIntEnter(void)
{
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr; //为CPU状态寄存器分配存储区
#endif
OS_ENTER_CRITICAL();
if(OSIntNesting<255)
OSIntNesting++; //中断服务子程序嵌套计数之加1
OS_EXIT_CRITICAL();
}
Live together,or Die alone!
原文地址:https://www.cnblogs.com/hzhida/p/2395675.html