ucos-II 任务调度源码分析(三)
ucos-II并不像linux等操作系统一样提供中断程序处理的框架,更合理的说法是用户必须在自己的中断服务程序中适配ucos的任务调度机制。这个适配就是在OSIntEnter和OSIntExit。ucos-II在中断机制中考虑如下两点设计:
- 中断是可以嵌套的,但所有嵌套的中断必须一次处理完;
- 当所有嵌套的中断处理完成后,选择优先级最高的任务执行,而非被中断的任务;
ucos-II中中断的例子(STC单片机串口中断):
SerialISR: USING 0 CLR EA LCALL_? OSIntEnter LCALL_? serial LCALL_? OSIntExit SETB EA POPALL RETI
函数OSIntEnter中全局变量OSIntNesting++,表示中断的嵌套程度;
函数OSIntExit完成如下工作:
- 如果OSIntNesting为0,即所有的嵌套中断都已经完成,调用OS_SchedNew,获取当前最高优先级的就绪任务;
- 如果获取到任务不是当前的任务,调用OSIntCtxSw(定义在OS_CPU_A.ASM中),找到待执行任务的SP进行切换;(其中的机制与普通任务调度的原理一样,见ucos-II 任务调度(二))。
注:堆栈指针需要SP=SP-4,退回OSIntEnter和OSIntExit两个函数对堆栈的影像。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)