- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ucOS-II范例分析_01
嵌入式操作系统ucOS-II分析 ucOS-II应用程序基本结构 一些重要的ucOS-II API 1)OSTaskCreate函数 这个函数应该至少在main函数内调用一次,在OSInit函数调用之后调用,以创建一个任务。 系统首先从TCB空闲列表内申请一个空的TCB指针,然后根据用户给出的参数初始化任务堆栈,并在内部的任务就绪表内标记该任务为就绪状态。最后返回,这样一个任务就创建成功了。 2)OSTaskSuspend函数 将指定的任务挂起。如果挂起的是当前任务,会引发系统执行任务切换先导函数OSShed来进行一次任务切换。 这个函数只有一个优先级参数,在系统内部,优先级除了表示一个任务执行的先后次序外,还起着区分每一个任务的作用,即优先级也是任务的ID。所以uCOS-II不允许出现相同优先级的任务。 3)OSTaskResume函数 将指定的已经挂起的任务恢复成就绪状态。如果恢复任务的优先级高于当前任务,那么还会引发一次任务切换。 参数类似OSTaskSuspend函数,为指定任务的优先级。需要特别说明是,本函数并不要求和OSTaskSuspend函数成对使用。 4)OS_ENTER_CRITICAL宏 分析一下OS_CPU.H文件,它涉及特定CPU的实现。一般都被替换为一条或者几条嵌入式汇编代码。其实,它就是关中断。 只要任务不主动放弃CPU使用权,别的任务就没有占用CPU的机会,这个任务就是独占了。进入临界区后,这个应宏尽量少用,它会破坏系统的一些服务,尤其是时间服务。并使系统对外界响应性能降低。 5)OS_EXIT_CRITICAL宏 与OS_ENTER_CRITICAL配套使用的一个宏,在系统手册说明里它是退出临界区,其实就是重新开中断。 它必须和OS_ENTER_CRITICAL成对出现,否则会带来意想不到的后果,如系统会崩溃。我们应尽量少用这两个宏调用,因为他们的确会破坏系统的多任务性能。 6)OSTimeDly函数 这是调用最多的一个函数,它的功能是先挂起当前任务,然后进行任务切换,在指定的时间到来之后,将当前任务恢复为就绪状态,但是并不一定运行,如果恢复后是优先级最高的就绪任务话,那么就运行之。 可以将任务延时一定时间后再执行它,依靠时钟机制进行任务切换,暂时放弃CPU的使用权,但多任务性能会降低。 ucOS-II范例的源码分析 INCLUDES.H ucOS-II中所有的 *.C 文件都包括了以下定义:#include includes.h“ 唯一的缺点是INCLUDES.H中许多头文件在一些*.C文件的编译中是不需要的。虽然逐个编译这些文件要花费额外的时间,但代码的可移植性却增加了。 不依赖于编译的数据类型 可移植型数据类型的程序 Typedef unsigned char BOOLEAN; Typedef unsigned char INT8U; Typedef signed char INT8S; Typedef unsigned int INT16U; Typedef signed int INT16S; Typedef unsigned long INT32U; Typedef signed long INT32S; Typedef float FP32; Typedef double FP64; #define BYTE INT8S -----------| #define UBYTE INT8U -----------| #define WORD INT16S ------------| ucos-ucosII #define UWORD INT16U -----------| #define LONG INT32S -----------| #define ULONG INT32U -----------| 全局变量 定义全局宏的程序 #ifdef xxx_GLOBALS #define xxx_EXT #else #define xxx_EXT extern #endif .H 文件中每个全局变量都加上了xxx_EXT的前缀。xxx代表模块的名字。该模块的.C文件中有以下定义: #define xxx_GLOBALS #include includes.h uCOS_II.H中有以下定义: #ifdef OS_GLOBALS #define OS_EXT #else #define OS_EXT extern #endif? OS
您可能关注的文档
- WebRTC初探.pdf
- WPF中2维坐标系统.doc
- X-STREAM H2分析仪资料.pdf
- – Vision-Based Single-Stroke Character Recognition for Wearable Computing – Computer Visi.pdf
- _strong_二维磁法数据多目标粒子群反演算法_strong_.pdf
- ◇Homocysteine-lowering therapy a role in stroke prevention.pdf
- 什么是加拿大Stream-Tek气力输送器.pdf
- 公共四级考试作文 nothing succeeds without a strong will.docx
- 北邮2015春季大学英语2阶段作业1.docx
- 传统中医疗法与西药结合治疗脑卒中后癫痫临床疗效META分析-杨雪捷,柴铁劬.pdf
文档评论(0)