下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

滴答分辨率
[RTOS 实现构建块]

滴答的分辨率

RTOS 滴答文档页面所述,RTOS 时间 基于周期性的滴答中断。当 RTOS 任务希望等待一定的时间过去, 例如通过调用 vTaskDelay(),或等待事件发生, 例如通过在调用 xQueueReceive() 时指定阻塞时间, 任务会将最大阻塞时间(即在不使用任何 CPU 周期的情况下等待) 指定为滴答计数。宏 pdMS_TO_TICKS() 将毫秒转换为滴答计数。请求的阻塞时间始于 调用 API 时,也就是两个滴答中断之间。 滴答数是一个整数, 不能计算部分滴答周期,因此从调用 API 到下一个滴答中断之间的时间 被算作延迟(阻塞)周期的第一个滴答。这将导致在请求相同阻塞时间的不同 API 调用之间, 观察到的阻塞时间(挂钟时间)存在轻微差异。下图 以调用 vTaskDelay( 2 ) 为例,假设滴答周期为 1 毫秒,对此进行了演示。

第一张图显示的是在滴答中断后立即调用 vTaskDelay() 的情况 。观察到的阻塞时间将接近 2 毫秒(滴答 1 和滴答 2 之间的大部分时间, 加上滴答 2 和滴答 3 之间的所有时间)。

观察到的阻塞时间 1

第二张图显示的是调用 vTaskDelay() 恰好发生在一个滴答中断之前的情况 。观察到的阻塞时间将略高于 1 毫秒(滴答 1 和滴答 2 之间的一小部分时间, 加上滴答 2 和滴答 3 之间的所有时间)。

观察到的阻塞时间 2

通过这些示例可以看出,当指定 N 个滴答的延迟时, 实际延迟时间将始终介于((N-1)个滴答 * 滴答周期)和(N 个滴答 * 滴答周期)之间。对于这个具体的例子, 这意味着总延迟时间在 1.0000000001 毫秒和 1.99999999999 毫秒之间。

关于延迟时间的几个重要注意事项:

  • 滴答精度始终取决于作为参数指定的滴答计数,但不会少于(N-1)个滴答 。基本上,范围是从(N-1)个滴答到 N 个滴答(不包括 N 个滴答)。

  • 为了保证最小延迟时间为 N,您需要延迟(N/(滴答周期))+ 1 个滴答

  • 延迟的持续时间(以时间为单位)取决于调用延迟时 RTOS 滴答之间的时刻, 调用越接近即将到来的滴答,延迟时间就会越短。



下一节: RTOS 实现 - GCC 信号属性

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.