首页 > 其他分享 >UCOSIII的中断和时间管理

UCOSIII的中断和时间管理

时间:2024-07-30 14:54:19浏览次数:22  
标签:服务程序 UCOSIII 管理 中断 嵌套 延时 OS

前言

UCOSIII(也称为µC/OS-III)的中断管理是其实时操作系统(RTOS)功能的重要组成部分。中断是CPU的一种常见特性,用于向CPU通知异步事件的发生,使得CPU能够暂停当前正在执行的程序,转而执行中断服务程序(ISR)。在UCOSIII中,中断管理涉及多个方面,包括中断嵌套、中断服务程序的编写、临界区保护以及中断发布模式等。

一、中断嵌套

UCOSIII支持中断嵌套,即高优先级的中断可以打断低优先级的中断。UCOSIII使OSIntNestingCtr来记录中断嵌套的次数,最大支持250级的中断嵌套。每进入一次中断服务函数OSIntNestingCtr就会加1;当退出中断服务函数时,OSIntNestingCtr就会减1

二、中断服务程序的编写

在UCOSIII中,编写中断服务程序时需要使用到两个函数:OSIntEnter()OSIntExit()OSIntEnter()用于标记进入中断服务函数,并更新中断嵌套次数;OSIntExit()用于退出中断服务函数,并根据需要发起中断级任务切换。

在uC/OS-III(UCOSIII)中,并不是所有中断的处理程序中都必须显式地调用OSIntEnter()函数。然而,为了确保UCOSIII能够正确地管理中断嵌套和任务调度,建议在所有中断服务程序(ISR)的入口处调用OSIntEnter(),并在退出中断服务程序之前调用OSIntExit()

一个典型的中断服务程序模板如下:

void XXX_Handler(void) {
    OSIntEnter(); // 进入中断,记录中断嵌套次数
    // 用户自行编写的中断服务程序
    OSIntExit(); // 退出中断,发起任务切换
}

三、临界区保护

临界区(Critical Section)指的是代码中的某些关键部分,这些部分的执行要求不能被打断。在UCOSIII中,有两种方式用于保护临界区代码:

直接发布模式:当宏OS_CFG_ISR_POST_DEFERRED_EN定义为0时,UCOSIII通过关闭中断来保护临界段代码。这种方式可能会延长中断的响应时间。

        

延迟发布模式:当宏OS_CFG_ISR_POST_DEFERRED_EN定义为1时,UCOSIII通过锁定任务调度来保护临界段代码。在延迟发布模式下,基本不存在关闭中断的情况,而是通过任务调度来实现中断发布,从而减少中断关闭时间。

四、时间管理

4.1时钟节拍

时钟节拍是UCOSIII实时操作系统的“心脏”,它决定了系统时间的最小单位。时钟节拍就是系统以固定的频率产生中断(时基中断),并在中断中处理与时间相关的事件,推动所有任务向前运行。时钟节拍需要依赖于硬件定时器,例如在STM32裸机程序中经常使用的SysTick时钟。

用户需要在os_cfg_app.h中设定时钟节拍的频率(例如#define OS_CFG_TICK_RATE_HZ 1000u),该频率越高,操作系统检测事件就越频繁,可以增强任务的实时性,但也会增加操作系统内核的负担。

4.2任务睡眠延时

UCOSIII提供了OSTimeDly()函数,允许任务调用该函数将执行挂起直到一段时间过去。OSTimeDly()函数允许三种模式:

  1. 相对模式(OS_OPT_TIME_DLY):延时时间从当前时刻开始计算。但是,由于系统负荷的影响,实际延时时间可能并不精确。
  2. 周期模式(OS_OPT_TIME_PERIODIC):任务延时时间间隔总是相同,不受负载变化的影响。
  3. 绝对模式(OS_OPT_TIME_MATCH):在上电后指定的时间执行特定的动作。

4.3延时精度

由于UCOSIII的时钟节拍是固定的,因此任务的延时精度受限于时钟节拍的频率。例如,如果时钟节拍频率设置为1000Hz(即每秒钟1000个节拍),则最小延时单位为1毫秒。但是,由于系统调度和其他任务的影响,实际延时时间可能并不完全精确。

注意,如果调用延时函数小于最小延时单位(1000Hz下为1毫秒),任务会被阻塞不会进行调度。

标签:服务程序,UCOSIII,管理,中断,嵌套,延时,OS
From: https://blog.csdn.net/qq_38072731/article/details/140796363

相关文章

  • 069基于SSM+Jsp的智能停车场管理系统
     开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示系统功能界面用户注册用户信息车位信息管理员登录界面管理员功能界面用户管理车位信息管理......
  • 前端Vue组件化实践:打造灵活可维护的地址管理组件
    随着前端技术的不断演进,复杂度和开发难度也随之上升。传统的一体化开发模式使得每次小小的修改或功能增加都可能牵一发而动全身,严重影响了开发效率和维护成本。组件化开发作为一种解决方案,通过模块化、独立化的开发方式,实现了单独开发、单独维护,并允许组件间的自由组合,从而极大......
  • C++中函数调用的过程(包括参数传递、栈帧管理等)是怎样操作的
    在C++中,函数调用的过程是一个复杂但高效的操作,涉及到多个方面,包括参数传递、栈帧管理、返回机制等。下面将详细解释这些过程:1.参数传递C++中,函数参数的传递方式主要有两种:值传递(PassbyValue)和引用传递(PassbyReference或PassbyPointer)。值传递:在值传递中,函数参数是......
  • 运维管理平台化:运维体系为什么要基于平台化建设
    本文来自腾讯蓝鲸智云社区用户:CanWay摘要:笔者根据自身的技术和行业理解,分享嘉为蓝鲸数据与智能运维场景实践。涉及关键字:一体化运维、平台化运维、数智化运维、AIOps、运维PaaS、运维工具系统、蓝鲸等。本文作者:嘉为蓝鲸运维产品及解决方案负责人张敏、嘉为蓝鲸平台产品线总......
  • 前端实现【 批量任务调度管理器 】demo优化
    一、前提介绍我在前文实现过一个【批量任务调度管理器】的demo,能实现简单的任务批量并发分组,过滤等操作。但是还有很多优化空间,所以查找一些优化的库,主要想优化两个方面,上篇提到的:针对3,其实可以自己手写一个,也可以依靠如什么来实现。针对2,最难的是根据【当前系统负......
  • 7.8 做技术比管理工作简单多了
    整理项目进度的实际耗时远比想象的多,因为参与者众多且背景各异,大家也都自己本身的任务。值得一提的是,相较于两个月前初涉时的生涩,如今我在协调各方时多了几分从容不迫,工作推进亦显顺畅,这是否是我已有进步的标志。然而,项目管理的艺术深邃而复杂,还有很多学问等待我的探索。比如:如......
  • 干货-并发编程提高——线程的中断(六)
    执行IO命令的线程不管是本地IO还是网络IO在JVM中线程其状态都是Runable。相对于操作系统,OS会将当前线程挂起,然后由调度队列另起一个线程来执行。此时硬盘正在与CPU并发工作。当IO完成时,CPU会收到来自硬盘的中断信号。类似于回调的操作,告诉你,已经处理完了,等着收尸吧。此时之前......
  • 基于java+ssm+jsp旅行社管理系统的设计与实现录像(源码+lw+部署文档+讲解等)
    前言......
  • 关于管理者上台讲话技巧
    关于管理者上台讲话技巧的指南,它强调了四个关键要点,旨在帮助管理者提升演讲能力,增强沟通效果和个人影响力。首先,指出“讲话要大声”。       这一点强调了声音的力量,认为大声讲话不仅能使听众更清晰地听到内容,还能展现领导者的自信和气质。在公开场合,适度的音量提升可以显......
  • 基于SpringBoot+Vue前后端分离的高校实验室预约管理系统的设计与实现
    基于SpringBoot+Vue前后端分离的高校实验室预约管理系统的设计与实现DesignandImplementationofCollegeLaboratoryReservationManagementSystembasedonSpringBootandVueforFront-End/Back-EndSeparation完整下载链接:基于SpringBoot+Vue前后端分离的高校......