|
Hi:
我把FREERTOS 移植到STM32F401RE上面,函数库为STM32Cube1.9.0,移植好,跑了个灯,没啥问题。
遇到一个奇怪的问题,在任务间通信的时候。
uxBits=xEventGroupSetBits(myEventGroup,BIT_0);
执行这句话之后返回0,通过单步调试看,确实是0,但是
uxBits=xEventGroupWaitBits(myEventGroup,
BIT_0,
pdTRUE,
pdTRUE,
xTickToWait);
这个任务是能收到事件标志的,
问题定位: 查到任务2 加延时,uxBits=xEventGroupSetBits(myEventGroup,BIT_0); 就能返回1,如果任务2不加延时,返回就是0,但是waitBits 是能收到设置的事件标志,不管返回0,还是返回1,好奇怪。
void vTaskTwo(void *pvParameters)
{
EventBits_t uxBits;
const TickType_t xTickToWait=100/portTICK_PERIOD_MS;
printf("\n\r============ start Task2 ============ \n\r");
while(1)
{
uxBits=xEventGroupWaitBits(myEventGroup,
BIT_0,
pdTRUE,
pdTRUE,
xTickToWait);
if((uxBits&BIT_0)==BIT_0)
{
printf("\n\r接收到BIT0被置1的消息\n\r");
}
else
{
printf("\n\r——————————————没有接收到BIT0被置1的消息——————————————\n\r");
}
vTaskDelay(200); /////////////这个地方导致不加延时导事件标志 返回0
}
}
版主有没有遇到这样的问题?
在任务2中,加入任务锁,能解决这个问题,但是按键检测是优先级是6,任务2的优先级是3.也打断不了任务6。好奇怪。 |
|