- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于UCOS入式实时操作系统的单任务和多任务LED显示总结----娄...
基于uCOSII的单任务和多任务LED显示
一、uCOSII简介
uCOS II是一个微型的实时操作系统,包括了一个操作系统最基本的一些特性,如任务调度、任务通信、内存管理、中断管理、定时管理等。而且这是一个代码完全开放的实时操作系统,简单明了的结构和严谨的代码风格,非常适合初涉嵌入式操作系统的人士学习。
二、设计目的
通过实验,学习在uC/OSII操作系统中单任务控制LED闪烁和多个任务控制LED之间的切换和同步,以及多任务控制程序的编写方法。
裸机程序和uCOSII 的运行流程对比
3.1 裸机程序的运行流程
裸机主函数的运行流程:
这个是我们写一般的单片机程序的流程,就是在主函数中用死循环执行功能函数,然后加上中断。
3.2 uCOSII 的运行流程
uCOSII是一个操作系统,但是说到底也是一个支持任务切换的裸机程序。
在初始化变量OSInit函数中,初始化所有全局变量,数据结构,创建最低优先级空闲任务OSTaskIde,并创建6个空数据链表:空任务控制块链表,空事件控制块链表,空列队控制块链表,空标志组链表,空内存控制块链表,空闲定时器控制块链表
创建任务 OSTaskCreate函数,一般创建一个最高优先级任务TaskStart任务,任务调度后,在这个任务中再创建其他的任务,初始化硬件,并打开中断。
进入多任务管理阶段OSStart函数,将就绪表中最高优先级任务的栈指针加载到SP中,并强制中断返回。
任务调度工作就是查找就绪表中优先级最高的任务,实现任务的切换。
简单来说,裸机程序在主函数中通过死循环执行各种函数,最终达到实现各种功能函数的目的。而uCOSII系统,通过不断的产生定时中断,或则任务主动放弃CPU,然后进行任务之间的调度,相当于不断循环执行不同的任务,最终实现各种任务。
工作原理
4.1uCOSII 的内核管理
4.1.1 ucos的文件结构:
4.1.2 临界段:
OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。它们可以用不同的方法去实现,用定义(#define)常数OS_CRITICAL_METHOD(1,2,3)来选择用哪种方法来实现。
当OS_CRITICAL_METHOD=1时,表示用处理器指令关中断,完成OS_ENTER_CRITIACL,用开中断完成OS_EXIT_CRITICAL.利用这种方法有点小问题,即是调用UCOS功能函数之前,中断是关掉的,从UCOS返回后,中断就打开了。
当OS_CRITICAL_METHOD=2时,这种方法是在堆栈中保存中断的开关状态,然后再关中断。在实现OS_EXIT_CRITICAL时,只需简单的从堆栈中弹出原来中断的开关状态。利用这种方法,不论用户在调用函数之前中断是开着的还是关着的,函数的进入和返回状态都得到了保护。
当OS_CRITICAL_METHOD=3时,一些编译器提供了扩展功能,用户可以得到当前处理器的状态字,并保存在C函数的局部变量中,这个变量可以用于恢复PSW。在STM32中,我们一般都是用第三种模式。
4.1.3 任务的状态:
任务状态之间的转换如下图:
特别值得注意的是,在任务执行的过程中可以被中断打断。
4.1.4任务控制快:
系统必须为每个任务创建一个保存与该任务有关的相关信息的数据结构,这个数据结构就叫做该任务的任务控制块(TCB)。当任务的CPU使用权被剥夺时UCOS利用它来保存任务的状态。
4.1.5就绪表:
每个就绪的任务都放在就绪表中,就绪表中有两个变量,OSRdyGRP和OSRdyTbl。OSRdyGrp中每一位表示8组任务中每一组是否有进入就绪态的任务。当有任务进入就绪态时,就绪表OSRdyTbl[]中相应元素的相应位也置为1。
4.1.6任务调度OS_SCHED():
Ucos总是进行进入就绪态任务中优先级最高的任务,确定哪个任务优先级最高,这一工作就是有调度器完成的。
4.1.7任务切换OS_TASK_SW() :
需恢复该任务在CPU使用权被剥夺时保存下来的全部寄存器的值,之后,运行被切换的任务。
4.1.8给调度器上锁和开锁:
给调度器上锁函数OSSchedlock()用于禁止任务调度,直到任务完成后,调用调度器开锁函数OSSchedUnlock()为止。这两函数必须成对使用。
4.1.9空闲任务OS_TaskIdle():
每个程序必须在初始化时建立一个空闲任务,这个任务没有其他任务进入就绪态时,投入运行,空闲任务永远处于就绪态。空闲任务始终设为最低优先级。OSTaskIdle()可以调用OSTaskIdleHook()让CPU进入STOP指令,从而进入低功耗模式。当应用系统有电池供电时,这种方式特别有用。
4
您可能关注的文档
- 文献检索与文综述.ppt
- 新型经济体的起对世界经济格局的影响与未来发展前景.ppt
- 新客户洽谈培.ppt
- 控烟教育宣传、黑板报.doc
- 新新 妊娠期血压疾病护理课件.ppt
- 新课标人教版中英语必修1单词(默写用).doc
- 核心价值观题.doc
- 梅岭三章 修改后).ppt
- 概率论与数理计-2.2随机变量函数的分布.ppt
- 植物病害的防.ppt
- 2025AACR十大热门靶点推荐和解读报告52页.docx
- 财务部管理报表.xlsx
- 高中物理新人教版选修3-1课件第二章恒定电流第7节闭合电路欧姆定律.ppt
- 第三单元知识梳理(课件)-三年级语文下册单元复习(部编版).pptx
- 俄罗斯知识点训练课件-七年级地理下学期人教版(2024).pptx
- 课外古诗词诵读龟虽寿-八年级语文上学期课内课件(统编版).pptx
- 高三语文二轮复习课件第七部分实用类文本阅读7.2.1.ppt
- 高考物理人教版一轮复习课件第4章第3讲圆周运动.ppt
- 高考英语一轮复习课件53Lifeinthefuture.ppt
- 2025-2030衣柜行业风险投资发展分析及投资融资策略研究报告.docx
文档评论(0)