1.什么是临界段
执行下的时候不能被中断的代码段。
系统调度和外部中断都会打断,系统调度本质是产生PendSV中断。NMI FAULST和Hard FAULE除外
2.代码实现
contex_gcc.c中添加
rt_base_t __attribute__((noinline)) rt_hw_interrupt_disable(void)
{
asm volatile(
" LD r0,#INT_CTL0""\n"
" LD.W r0,[r0]""\n"
" DSI""\n"
" JMP lr""\n"
);
}
/*
* rt_hw_interrupt_enable(rt_base_t level);
*/
void __attribute__((noinline)) rt_hw_interrupt_enable(rt_base_t level)
{
asm volatile(
" LD r1,#INT_CTL0""\n"
" ST.W [r1],r0""\n"
);
}