【问题标题】:About FreeRTOS: How to define the xBlockTime value in the "xSemaphoreTake" API?关于 FreeRTOS:如何在“xSemaphoreTake” API 中定义 xBlockTime 值?
【发布时间】:2022-08-19 20:26:27
【问题描述】:

首先,FreeRTOS 中的声明是这样的:

#define xSemaphoreTake( xSemaphore, xBlockTime )    xQueueSemaphoreTake( ( xSemaphore ), ( xBlockTime ) )

在我正在做的当前项目中,\"xSemaphoreTake\" API 中的 xBlockTime 参数的值是随机分配的:有时是 5,也可能是 10、200、1000、portMAX_DELAY 等。

那么如何确定这个参数在你眼中的正确(或最佳)值呢?

    标签: freertos


    【解决方案1】:

    正如documentation for xSemaphoreTake 中提到的,第二个参数是“等待信号量可用的滴答时间”。如果信号量在指定时间间隔后不可用,则 xSemaphoreTake 返回 pdFALSE。

    合适值的范围完全取决于应用要求。信号量通常用于防止多个任务同时访问某个资源。如果资源不能及时获得怎么办?您是否应该敲响警钟以提醒操作员?在某处记录错误消息?升旗?或者在调试版本中插入硬调试器断点以简化故障排除? 如果不着急,那么适当的做法是休眠直到资源可用,因此我们可以将阻塞时间设置为portMAX_DELAY。

    【讨论】:

      猜你喜欢
      • 2019-08-15
      • 1970-01-01
      • 2021-07-17
      • 2018-11-27
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      相关资源
      最近更新 更多