接前一篇文章:ESP-IDF中调用xEventGroupWaitBits函数失效问题的分析(1)
上一回讲了笔者在实际项目中所遇到的问题,跟到最后发现,是FreeRTOS等待函数xEventGroupWaitBits自身在任务挂起/恢复后不能阻塞住所导致的。并且在上一回中,笔者做了一个复现问题的最小例程。
那么,这到底是FreeRTOS的问题还是机制使然呢?为此,笔者咨询了乐鑫技术支持,他们给出了以下答复:
看来不止我一个人遇到了这个问题,早在2018年就有人也发现了这个问题,只是没有多少人能看到这个帖子,这才导致了7年过去了(都快和抗战一样了),仍然会再次陷坑。这也正是笔者写此文的目的,利用优快云平台以及自身的影响力,把这个问题让更多人看到,避免重复入坑、掉坑里出不来。
进入到乐鑫技术支持给出的网页链接:xEventGroupWaitBits unexpected behavior - FreeRTOS
在此把当时这位同仁(应该是一位外国同仁)遇到的问题藐视翻译一下:
你好,我发现xEventGroupWaitBits函数有以下行为:
我有两个任务。在第一个任务中,执行以下事务:
xEventGroupWaitBits(handle, bits, …, portMAXDELAY_);
在第二个任务中,执行以下事务:
vTaskSuspend(handletask1); avtivity(); vTaskResum(handletask1);
在task1中,即使没有设置任何位,函数xEventGroupWaitBits也会在vtaskResume之后立即退出。这是正确的行为吗?