在uCOS初始化时,调用了 BSP_IntDisAll(); /* Disable all Interrupts. */ 这句话是设置了primask位,即是关闭了可屏蔽中断。 为什么要这样做啊?我去掉了这句话后,lwip确实就不正常了。
PRIMASK
只有单一比特的寄存器。置为1后,就关掉所有可屏蔽异常,只剩下NMI和硬Fault可以响应。默认值是0,表示没有关闭中断。
是这样的,我在学习ucOS+lwip,在别人的代码里,ucOS启动任务前将PRIMASK置位关了中断,但是后面一直没有找到开中断的地方,那么SysTick中断也应该被关了。但是lwip任务还是能够正常运行,去掉关中断那句话反而不行了。后来就把这个问题搁那儿了。
我也只是在自学,没有上过项目。stm32给的示例代码里,实时操作系统都用FreeRTOS
趁早改行