我们在 STM32F407 板上的 CMSIS 和 FreeRTOS 中遇到互斥锁问题。
有两个线程可以通过 UART 访问硬件无线电。我们使用互斥锁来确保一次只有一个线程可以与无线电通信。
每次成功捕获或释放互斥体时使用SWO打印到串口,我们可以看到在某些情况下会发生以下情况:
线程 1 使用 osMutexWait(radioAccessMutex, 400) 成功捕获互斥锁
线程 2 使用 osMutexRelease(radioAccessMutex) 成功释放相同的互斥锁
据我了解,互斥锁只能由当前持有互斥锁的线程释放。
两个互斥调用的返回值都是 osOK。递归互斥锁已在配置文件中关闭。两个线程的优先级相同。
可能相关信息:CMSIS v. 1.02 FreeRTOS v. 8.2.1
SWO 输出代码:
void SWO_write(char* output)
{
for(int i = 0; i < strlen(output); i++)
{
ITM_SendChar(output[i]);
}
}
每次成功调用后立即捕获或释放互斥锁时都会调用此代码。一个以 null 结尾的字符串与调用结果一起传入。