gpt4 book ai didi

c - 互斥量由一个线程捕获并由另一个 CMSIS 和 FreeRTOS STM 板释放

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:49 25 4
gpt4 key购买 nike

我们在 STM32F407 板上的 CMSIS 和 FreeRTOS 中遇到互斥锁问题。

有两个线程可以通过 UART 访问硬件 radio 。我们正在使用互斥体来确保一次只有一个线程可以与 radio 通信。

使用SWO在每次成功捕获或释放互斥锁时打印到串口,可以看到在某些情况下会出现以下情况:

  • 线程 1 使用 osMutexWait(radioAccessMutex, 400) 成功捕获互斥体

  • 线程 2 使用 osMutexRelease(radioAccessMutex) 成功释放相同的互斥量

据我了解,互斥锁只能由当前持有互斥锁的线程释放。

两个互斥锁调用的返回值都是 osOK。配置文件中已关闭递归互斥锁。两个线程的优先级相同。

可能相关的信息:CMSIS 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]);
}
}

每次在成功调用后立即捕获或释放互斥锁时,都会调用此代码。以空字符结尾的字符串随调用结果一起传入。

最佳答案

我们使用的 CMSIS 和 FreeRTOS 配置确实允许一个线程释放另一个线程捕获的互斥体。

我添加了一个新的互斥量来测试是否一个线程可以捕获它而另一个线程可以释放它。我在调试器中检查了每个调用的值,并且都返回了 osOK。 CMSIS/FreeRTOS 确实允许这种行为。这两个位置是唯一改变互斥量的区域。

关于c - 互斥量由一个线程捕获并由另一个 CMSIS 和 FreeRTOS STM 板释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com