ucosiii学习(4)——中断和时钟

本文详细介绍了UCOSIII操作系统中的中断管理和时钟管理。中断部分讲解了中断预处理、处理和后处理的流程,以及中断嵌套的实现。时钟部分阐述了时钟节拍如何用于任务延迟和超时判断,并通过Systick中断服务程序调用OSTimeTick()。时间管理部分讨论了延时函数OSTimeDly()和OSTimeDlyHMSM()的使用,以及如何获取和设置系统时间。
摘要由CSDN通过智能技术生成

1.中断

系统收到中断请求后,若CPU处于中断允许状态,则中止当前任务,转去运行中断子程序。中断子程序运行结束后,返回被中止的任务继续运行或者转向优先级更高的任务。UCOSIII支持中断嵌套,即高优先级的中断可以打断低优先级的中断,在UCOSIII中使用OSIntNestingCtr来记录中断嵌套次数,最大支持250级的中断嵌套,每进入一次中断服务函数OSIntNestingCtr就会加1,当退出中断服务函数的时候OSIntNestingCtr就会减1。
 

一般操作流程:

中断预处理:

  • 进入中断时先关中断,之后将CPU寄存器保存到任务堆栈内,这些对C程序员是透明的;
  • 通过OSIntEnter()函数,递增OSIntNestingCtr值,表示多一层嵌套的中断;
  • 若此中断为第一层中断,还应保存此时的堆栈指针值;
  • 清除中断请求标志位;

中断处理:

  • 重新开中断(根据实际需要来选择);
  • 进行相关的处理,但原则上应该尽量精简,最好只是发布信息,实际工作由相关任务来做;

中断后处理:

  • 调用OSIntExit()函数:递减OSIntNestingCtr,若退为0,表示已经没有中断,系统内核判断是否使某个高优先级任务就绪;
  • 若有高优先级任务就绪,此时中断不会返回之前任务,而是直接执行高优先级任务ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值