gpt4 book ai didi

c - FreeRTOS:osDelay 与 HAL_delay

转载 作者:太空狗 更新时间:2023-10-29 17:18:17 26 4
gpt4 key购买 nike

在使用STM32CubeMx创建FreeRTOS应用工程时,有两种方法可以引入延迟,即osDelayHAL_Delay

它们之间有什么区别,应该首选哪一个?

osDelay代码:

/*********************** Generic Wait Functions *******************************/
/**
* @brief Wait for Timeout (Time Delay)
* @param millisec time delay value
* @retval status code that indicates the execution status of the function.
*/
osStatus osDelay (uint32_t millisec)
{
#if INCLUDE_vTaskDelay
TickType_t ticks = millisec / portTICK_PERIOD_MS;

vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */

return osOK;
#else
(void) millisec;

return osErrorResource;
#endif
}

HAL_Delay代码:

/**
* @brief This function provides accurate delay (in milliseconds) based
* on variable incremented.
* @note In the default implementation , SysTick timer is the source of time base.
* It is used to generate interrupts at regular time intervals where uwTick
* is incremented.
* @note ThiS function is declared as __weak to be overwritten in case of other
* implementations in user file.
* @param Delay: specifies the delay time length, in milliseconds.
* @retval None
*/
__weak void HAL_Delay(__IO uint32_t Delay)
{
uint32_t tickstart = 0;
tickstart = HAL_GetTick();
while((HAL_GetTick() - tickstart) < Delay)
{
}
}

最佳答案

HAL_Delay 不是 FreeRTOS 函数,_osDelay 是构建的函数围绕 FreeRTOS 功能。 (acc @Clifford:)它们都是完全不同的功能,由不同的开发人员出于不同的目的。

osDelayCMSIS 库 的一部分,在内部使用 vTaskDelay() 引入延迟,区别在于 的输入参数osDelay 是以毫秒为单位的延迟时间,而 _vTaskDelay() 的输入参数是要延迟的滴答数。 (根据 @Bence Kaulics:)使用此功能,操作系统将收到有关延迟的通知,并且操作系统将在该特定时间段内将任务状态更改为已阻止

HAL_Delay 是我们处理器的硬件抽象层的一部分。它基本上使用轮询来引入延迟。 (acc. @Bence Kaulics:) 使用此功能,操作系统将不会收到有关延迟的通知。此外,如果您不使用 OS,则 HAL_Delay 是 HAL 库提供的默认且唯一可使用的阻塞延迟。 (根据 @Clifford:)这是 HAL 库的一部分,可以在没有 FreeRTOS 的情况下使用(或当 FreeRTOS 未运行时)

使用FreeRTOS函数引入Delay,可以使用vTaskDelay()vTaskDelayUntil()在调度程序启动后。

(根据 @Clifford:)
如果您希望您的应用程序具有确定性,请始终使用 FreeRTOS API 函数。
CubeMX 是来自多个来源的零件的集合。

关于c - FreeRTOS:osDelay 与 HAL_delay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42276313/

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