C 奇怪的if条件

C 奇怪的if条件,c,embedded,C,Embedded,我正在研究Atom 32位上的MicroC。 我声明了2个堆栈大小为0x100的任务(足以完成我的任务)。当我在一个任务中调用函数并检查其if条件时: if (OSSchedLockNestingCtr > (OS_NESTING_CTR)0u) { *p_err = OS_ERR_SCHED_LOCKED; return; } 即使OSSchedLockNestingCtr==0,代码也会进入!我检查了esp,esp在堆栈表中,所以我没有堆栈溢出。即使条件为假,如何才能

我正在研究Atom 32位上的MicroC。 我声明了2个堆栈大小为0x100的任务(足以完成我的任务)。当我在一个任务中调用函数并检查其
if
条件时:

if (OSSchedLockNestingCtr > (OS_NESTING_CTR)0u) 
{ 
   *p_err = OS_ERR_SCHED_LOCKED;
   return;
}

即使
OSSchedLockNestingCtr==0,代码也会进入!我检查了esp,esp在堆栈表中,所以我没有堆栈溢出。即使条件为假,如何才能进入
if
分支?

已解决:我发现,当我一步一步手动执行时,中断功能自动运行(1秒内5次中断),不知何故,变量采用了其他值(中断->ISR->将一些数据放入卡滞->返回我的函数->wierd值:))。10倍于所有人

这里是否有多个线程/ISR可以修改内容?你在调试器中使用过汇编程序吗?0u
的值是多少?无论
OS\u NESTING\u CTR
是什么,它都可能使用
0u
执行算术运算,使其小于
0
。当你说“它进入”时,你是如何检测到的?使用调试器单步执行,或者看到函数在*p_err中返回错误?如果您使用的是调试器,那么这可能只是一个重新组织了内容的编译器优化,而实际上并没有进行吗?否则,请在程序集级别逐步执行,并查看当它计算>条件时,在寄存器级别实际比较的值。您是否检查了if之后是否没有分号?你可能已经检查过了,但我曾经因为这样一个离群的角色浪费了整整一个下午。我发现,当我一步一步地手动操作时,中断功能是自动运行的(1秒内5次中断),所以变量是如何获取其他值的(中断->ISR->将一些数据放入卡住的->返回到我的函数->wrierd值:)。即使你回答了自己的问题,你仍然应该把它标记为正确答案。