硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3212|回复: 2
收起左侧

[RTOS] RTX5的系统时钟节拍和STM32H7的HAL库时间基准都使用Systick的简单方法

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
发表于 2019-2-19 01:29:43 | 显示全部楼层 |阅读模式
由于RTX5的系统时钟节拍默认是用的滴答定时器,STM32H7的HAL库时间基准也是用的滴答定时器

对于这种情况,我们一般的情况下是使用其他的通用定时器替代,不过要额外的占用一点系统性能,多占用一个定时器倒是没有关系,应该H7的定时器很多。

简单的处理办法是重新下面两个函数即可:
  1. HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority)
  2. {
  3.         return HAL_OK;
  4. }

  5. uint32_t HAL_GetTick (void)
  6. {
  7.         static uint32_t ticks = 0U;
  8.         uint32_t i;

  9.         /* RTX5启动后使用 */
  10.         if (osKernelGetState () == osKernelRunning)
  11.         {
  12.                 return ((uint32_t)osKernelGetTickCount ());
  13.         }

  14.         /* RTX5启动前使用  */
  15.         for (i = (SystemCoreClock >> 14U); i > 0U; i--)
  16.         {
  17.                 __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
  18.                 __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
  19.         }
  20.         
  21.         return ++ticks;
  22. }
复制代码



回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2019-2-19 09:35:34 来自手机 | 显示全部楼层
eric2013 发表于 2019-2-19 01:29
由于RTX5的系统时钟节拍默认是用的滴答定时器,STM32H7的HAL库时间基准也是用的滴答定时器

对于这种情况 ...

中断里面调用带延迟性的函数,要注意优先级
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
 楼主| 发表于 2019-2-19 09:46:31 | 显示全部楼层
byccc 发表于 2019-2-19 09:35
中断里面调用带延迟性的函数,要注意优先级

这样的话,可以考虑全部基于时钟周期计数器DWT,这样就不需要注意优先级问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 04:36 , Processed in 0.167013 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表