大括号
if ,endif 是配套使用的哈voidOSSched(void)
{
uint8 temp;
OS_ENTER_CRITICAL();
#if EN_OS_INT_ENTER > 0
if (OSIntNesting == 0)
{
#endif // 就是这里了。为什么在上面那个if条件判断语句中,有了个endif。 下面可是还要执行的啊。 if和endif之间怎么会有一个条件判断语句?
#if OS_MAX_TASKS < 9
temp = OSTaskRuning;
for (OSNextTaskID = 0; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
{
if ((temp & 0x01) != 0)
{
break;
}
temp = temp >> 1;
}
OS_TASK_SW();
#else
temp = OSTaskRuning % 256;
for (OSNextTaskID = 0; OSNextTaskID < 8; OSNextTaskID++)
{
if ((temp & 0x01) != 0)
{
goto TaskSw;
}
temp = temp >> 1;
}
temp = OSTaskRuning / 256 ;
for (; OSNextTaskID < OS_MAX_TASKS; OSNextTaskID++)
{
if ((temp & 0x01) != 0)
{
break;
}
temp = temp >> 1;
}
TaskSw:
OS_TASK_SW(); /* 进行任务调度 */
#endif
#if EN_OS_INT_ENTER > 0
}
#endif
OS_EXIT_CRITICAL();
} #if EN_OS_INT_ENTER > 0
}
#endif
这儿也有一个,和上边对应的。 基本功而已
条件编译,定义了(EN_OS_INT_ENTER > 0)则只在 OSIntNesting == 0 的条件下才执行下面的代码,否则无条件执行
只要#if,#endif 成对出现即可。
(1)条件编译,即如果EN_OS_INT_ENTER > 0成立,则OSIntNesting == 0 会被编译器编译,否则不被编译(记住不是执行代码),此时等价于你直接删除如下几行代码。
#if EN_OS_INT_ENTER > 0
if (OSIntNesting == 0)
{
#endif (2)后面的大括弧“}”也必须同步的用如上的条件编译,否则孤零零的多处个大括弧,编译报错。
条件编译,定义了(EN_OS_INT_ENTER > 0)则只在 OSIntNesting == 0 的条件下才执行下面的代码,否则无条件执行
嗯,那我按大家的说法挨个排查一下,谢谢哈
页:
[1]