开发者社区 问答 正文

aos_msleep函数延时时间不对,如何校准

平台为兆讯MH1903,移植时参考STM32F4。目前使用示波器打tick时间为10ms正常,使用aos_msleep(100)延时示波器打出来的延时时间为600ms。

如何设置aos_msleep时间基准为tick时间

展开
收起
1290609701204519 2020-03-18 11:37:49 925 分享 版权
阿里云 AI 助理回答

针对您在兆讯MH1903平台上遇到的aos_msleep延时与tick时间不匹配的问题,可以尝试以下步骤进行调整:

问题分析

  • 现象描述:当前使用示波器测量得到硬件定时器(tick)间隔为10ms,但调用aos_msleep(100)函数后,实际延时达到600ms,表明系统延时功能未正确基于tick时间进行计算。

解决方案

1. 确认系统时钟配置

  • 首先,请确保您的系统时钟配置正确无误,特别是与tick相关的定时器配置。在移植过程中,需保证硬件定时器中断(通常用于实现tick)的频率设置为期望值,即每10ms产生一次中断。

2. 调整系统tick处理

  • 检查并调整操作系统(如AliOS Things)中关于tick处理的代码。这通常涉及到修改或确认os_tick_handler等回调函数,确保每次tick中断能准确更新系统时间计数。

3. 适配aos_msleep实现

  • aos_msleep函数内部实现依赖于系统tick进行延时计算。您可能需要检查并调整该函数的实现逻辑,确保其正确地将毫秒级延时转换为基于tick的计数。
    • 关键点:确认延时函数如何根据tick频率计算延时周期数,并正确累加这些周期直到达到目标延时。

4. 核对HAL层实现

  • 参考STM32F4的移植示例,检查您的HAL实现是否包含了所有必要的系统和定时器初始化,尤其是与RTOS(如果使用的话)相关的部分。确保HAL Timer接口(如os_timer_start, os_timer_stop)与平台硬件及RTOS兼容且正确工作。

5. 测试与验证

  • 修改后,通过示波器重新测试aos_msleep(100)的实际延时效果,确保调整生效且符合预期。

注意事项

  • 精确计时:在实时性要求高的应用中,精确配置系统tick对于确保任务调度和延时函数的准确性至关重要。
  • 资源消耗:调整tick频率或延时函数实现时,注意评估对系统资源(如CPU占用率、功耗)的影响。

请按照上述步骤检查并调整您的系统配置,以解决延时基准不匹配的问题。如果问题依旧存在,建议深入阅读相关HAL文档和RTOS内核说明,或考虑咨询具体平台和技术的支持团队。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: