0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RTOS的系统节拍

倩倩 来源:麦克泰技术 作者:麦克泰技术 2022-09-20 11:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

RTOS的系统节拍

传统的RTOS都是利用一个硬件定时器产生周期性的节拍中断,作为系统的时基。在多数的应用中,系统节拍的周期都是毫秒级的,RTOS的超时、延迟、定时的分辨率都是以节拍为单位。即使一个任务在几个连续的节拍内执行,系统节拍中断还是会周期性的发生,浪费了CPU的执行时间。下图是一个示例,虽然某段时间内只有IDLE任务在执行,系统节拍中断还是会如期发生。

ea3ca35a-3890-11ed-ba43-dac502259ad0.png

此外,任务延迟或超时等时间相关的功能都基于系统滴答中断计时,计时时间到后,通过系统节拍周期中断触发调度器。因此,如果任务的延迟时间小于一个系统节拍周期,则只能主动等待,直到所需的时间结束。

ea76de62-3890-11ed-ba43-dac502259ad0.png  

周期级分辨率的RTOS

SEGGER之前推出的embOS Ultra,改变了过去RTOS采用周期节拍中断作为系统时基的工作方式,采用硬件定时器加计数器的方式,只在必要时产生中断。这就消除了传统的周期性节拍中断,减少了不必要的CPU活动,同时能降低系统的功耗。embOS Ultra基于时间事件的调度都能以微秒指定。

eaa11f7e-3890-11ed-ba43-dac502259ad0.png  

体验embOS Ultra微秒级调度

目前embOS Ultra支持CortexM/R/A,以及RISC-V架构的处理器。从官网可以下载到基于SEGGER Embedded Studio的示例Demo,用于测试,内核以二进制库提供。embOS Ultra的API完全兼容embOS,只是多了几个任务管理的API,任务可以按照ms或us延迟。

ead43c9c-3890-11ed-ba43-dac502259ad0.png

先将Demo例程的任务做了修改,HPTask分别以1000us、2000us不等延迟,LPTask以80ms延迟。


static void HPTask(void) { while (1) {   BSP_SetLED(0);   OS_TASK_Delay_us(1000);   BSP_ClrLED(0);   OS_TASK_Delay_us(2000);   BSP_SetLED(0);   OS_TASK_Delay_us(3000);   BSP_ClrLED(0);   OS_TASK_Delay_us(4000); }}
static void LPTask(void) { while (1) {  BSP_ToggleLED(1);  OS_TASK_Delay_ms(80u); }}

下载代码至目标板上运行,通过SystemView来观测系统的执行:

eb3fd6b4-3890-11ed-ba43-dac502259ad0.png

从OS事件视图可以看到,系统不存在周期性的节拍中断,只是在需要进行任务调度时触发一次中断。从下面的Timeline视图可以更直观的看出,红色涂抹的位置是系统中断。

eb757ad0-3890-11ed-ba43-dac502259ad0.png

注意上图中的时间(996.8us、1.9ms,2.9ms……)并不是任务的间隔时间,而是调度器执行的间隔时间。

再将任务代码改成:


static void HPTask(void) { while (1) {   BSP_SetLED(0);   OS_TASK_Delay_us(50);   BSP_ClrLED(0);   OS_TASK_Delay_us(100); }}
static void LPTask(void) { while (1) {  BSP_ToggleLED(1);  OS_TASK_Delay_us(200u); }}

HPTask任务分别延迟50us和100us,LPTask延迟200us,运行后观测Timeline:

ebc16274-3890-11ed-ba43-dac502259ad0.png

HPTask首次执行延迟了50us之后,系统定时器中断触发,调度器开始执行,从IDEL任务切换到HPTask任务。同时可以发现,从中断触发到HPTask任务体开始执行实际上已经过去了10us,这是因为中断处理和任务调度的执行需要消耗一定CPU时间,这个与处理器架构和CPU运行频率有关,在Cortex-M上大概在10us左右。也就是说在当前的处理器上,延迟时间小于10us是没有意义的,但是在主频很高的MPU(应用处理器)上这个时间可能要短很多。

总之,现在很多的MCU的性能都已经很高了。同时,一些应用要求处理器有比较高的计算能力,还要求系统能有很好的实时性,甚至在MPU上使用RTOS。此种应用场景下,如果RTOS支持CPU周期级别的分辨率,这实际上可以进一步提升系统的实时性。而且,在针对一些外设的处理上,使用微秒级的延迟,还能提高CPU的使用效率,扩展了RTOS的潜在应用范围。


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18615

    浏览量

    387237
  • 高分辨率
    +关注

    关注

    0

    文章

    56

    浏览量

    15693
  • 定时器
    +关注

    关注

    23

    文章

    3361

    浏览量

    121751

原文标题:embOS-Ultra:高分辨率系统时间

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RTOS Crash 问题全维度分析与解决指南

    RTOS Crash 问题全维度分析与解决指南 RTOS(实时操作系统)的Crash(崩溃)是嵌入式实时系统中最致命的故障之一,直接破坏系统
    发表于 12-08 03:56

    学习RTOS的意义?

    对于嵌入式软件工程师,学习RTOS非常有必要。 1. 项目需要 随着产品要实现的功能越来越多,单纯的裸机系统已经不能完美地解决问题,反而会使编程变得更加复杂,如果想降低编程的难度,就必须引入
    发表于 11-27 08:16

    RTOS 必学概念:任务、信号量、队列一次搞懂

    如果你刚接触RTOS(实时操作系统),很可能会有这样的困惑:“RTOS和裸机程序到底有什么区别?”“任务是线程吗?为什么要分任务?”“信号量和互斥锁有什么区别,不都是同步手段吗?”“队列是不是就是一
    的头像 发表于 11-17 10:53 196次阅读
    <b class='flag-5'>RTOS</b> 必学概念:任务、信号量、队列一次搞懂

    请问编译纯rtos到底是选择Linux+rtos的sdk编译only rtos还是直接使用rtos sdk?

    编译纯rtos到底是选择Linux+rtos的sdk编译only rtos还是直接使用rtos sdk?
    发表于 07-11 07:22

    下一代PX5 RTOS具有哪些优势

    许多古老的RTOS设计至今仍在使用,包括Zephyr(1980年代)、Nucleus(1990年代)和FreeRTOS(2003年)。所有这些旧设计都有专有的API,通常更大、更慢,并且缺乏下一代RTOS的必要安全认证和功能。
    的头像 发表于 06-19 15:06 879次阅读

    rtosrtos&amp;linux能否调整连接windows后的设备名称?

    rtosrtos&amp;linux 能否调整连接windows后的设备名称
    发表于 05-14 06:19

    如何在Eclipse ThreadX RTOS中集成SystemView

    可以基于Systemview记录ThreadX操作系统事件并执行分析。我们基于SEGGER Embedded Studio开发环境描述如何在Eclipse ThreadX RTOS中集成SystemView。
    的头像 发表于 05-06 17:11 1178次阅读

    RTOS如何在FX3中工作?

    大家好, 我正在使用 FX3 进行一个项目。 我想知道 RTOS 调度是如何工作的。 我知道调用“CyU3PKernelEntry();”后 RTOS 就会开始工作。 如果我只注册一个应用程序线程。 我的线程什么时候执行? 是否有其他
    发表于 05-06 13:20

    详解RTOS中的Hook函数

    Hook函数是RTOS中的一个关键特性,通过该函数,用户可以增强对任务管理的控制,定义系统行为。
    的头像 发表于 03-24 16:14 841次阅读

    RTOS中的本地存储指针使用

    本地存储指针是RTOS中的一个重要特性,增强了任务管理和数据处理能力。在RTOS上下文中,本地存储是指存储在本地的特定任务或对象的数据。通常与任务本地存储(Task Local Storage,TLS)有关,其中数据存储在任务控制块(TCB)中,允许每个任务具有私有的、特
    的头像 发表于 02-28 16:33 1172次阅读
    <b class='flag-5'>RTOS</b>中的本地存储指针使用

    如何在STM32CubeMX中集成Flexible Safety RTOS

    使用STM32处理器的用户,可以通过STM32Cube工具生成基础工程,免费评估功能安全操作系统Flexible Safety RTOS二进制库了。
    的头像 发表于 01-17 11:31 2263次阅读
    如何在STM32CubeMX中集成Flexible Safety <b class='flag-5'>RTOS</b>

    Flexible Safety RTOS的技术特征

    Embedded Office的Flexible Safety RTOS是专为具有严格功能安全要求的嵌入式系统量身定制的、先进的实时操作系统。该RTOS专为工业自动化、汽车、铁路和医疗
    的头像 发表于 01-07 11:29 998次阅读

    RTOS中的错误检查机制

    在嵌入式应用中,有可能发生各种各样的错误,系统必须能够检测到这些错误并作出适当的响应。RTOS通常内置了一些错误检查功能,用于检测错误并向应用提供响应错误的方法。
    的头像 发表于 01-03 14:44 1022次阅读

    使用任务通知提高RTOS应用的效率

    在实时嵌入式系统中,性能和资源效率是决定设计成败的关键因素。传统的实时操作系统RTOS)提供了如队列、信号量和事件组机制,实现任务之间的同步和通信。FreeRTOS/SAFERTOS还提供一种方法可以使这些过程更快、更轻量化,
    的头像 发表于 12-27 14:54 1073次阅读

    一种实现亚毫秒定时分辨率的RTOS新方法

    你在使用实时操作系统RTOS)时是否发现无法将任务调度或延迟精度降到毫秒以下?你可能不得不在RTOS之外编写大量应用代码。虽然这种方式可行,但这会让你怀疑应用程序是否满足其截止期限,是否可维护和可
    的头像 发表于 12-17 13:58 720次阅读
    一种实现亚毫秒定时分辨率的<b class='flag-5'>RTOS</b>新方法