STM32 HAL 替换 HAL_Delay 和相关函数

/ 0评 / 0

HAL库有巨大的优点,最显著就是可移植性,并且各种考虑也非常全面,但是也有例外的时候,比如任务里经常会存在各种HAL_Delay,白白空转都是浪费,而系统中已经有RTOS,为何不利用起来?至于其他开销?基本可以忽略啦,毕竟HAL_Delay(1)都不知道可以执行多少指令了.(当然除了初始化,一般也很少用到!)

首先,我用的是FreeRTOS,已经接管SysTick,因此HAL_InitTick/HAL_Init就多余了.可以直接删除调用.

然后打开FreeRTOS的configUSE_TICK_HOOK,来替换原来的HAL的Tick逻辑,当然也可以额外启动另外的定时器.

void vApplicationTickHook(){
  HAL_IncTick();
}

当然,这样移植之后,就要OS内核启动后,才开始做其他配置.实际测试.

但是,现在依然是等待,更完美还要修改HAL Tick的实现,不需要开启Hook,HAL库本来就为我们考虑了,我们只需要重载一下.(默认Weak定义,我们直接写一个自己函数就代替原来函数了.)

void HAL_Delay(uint32_t Delay)
{
  vTaskDelay(Delay);
}

uint32_t HAL_GetTick(void)
{
  return xTaskGetTickCount();
}

还是留有一个BUG,我们把这个BUG也填了,这里偷懒一下,不实现这个功能,因为库里默认也没用.

void HAL_ResumeTick(void)
{
}

void HAL_SuspendTick(void)
{
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注