最近在捣腾FreeRtos操作系统,整体感觉还是蛮简单的,但是有个现象不知道是否正确:
使用
vSemaphoreCreateBinary(SemaTest); ////创建 SemaTest二值信号量;
在中断中触发信号量:
void xxxHandle(void)
{
....
xSemaphoreGiveFromISR(semphr);
....
}
在任务中调用信号量:
void TaskTest(void)
{
for(; ;)
{
....
xSemaphoreTake(semphr, portMAX_DELAY );
....
}
}
现象:在程序没有进中断时,任务TaskTest也可以成果获取到一次信号量。
跟踪了代码,发现二值信号量创建后初始值默认为1,所以可以成功获取到一次。
不像uCOSIII中,在创建信号量时可以同时给定初始值。
|