- 1、本文档共3页,可阅读全部内容。
- 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-II读书的一点笔记
uC/OS-II读书的一点笔记重入与不可重入:可重入函数指当一个函数在被调用时,同时还能被其他函数调用,且不会产生错误.不可重入函数则不能同时被多次调用,多次调用可能会产生错误.例子:某函数有一个变量为全局变量,则如果该函数有多个实例在交替运行的话,由于同时存取同一全局变量,导致该变量被不同实例改变而引起错误.信号量:与同一共享数据打交道(可能是全局变量,也可能是共享资源如UART,打印机等)的任务调用等待信号量函数OSSemPend(),处理完后调用释放信号量函数OSSemPost().为防止无限等待可设置等待超时.例子://任务Task要存取共享数据,如果该数据正在被其他任务使用,则任务Task只能等待别的任务用//完,然后分配给任务Task使用.用完后释放该信号量,以供给其他任务使用(或者说将资源归还//给操作系统).void Task(void){? ? OSSemPend(...);? ? perform operation;? ? //porcess the data? ? OSSemPost(...);}信号量也可能是隐藏的.如多任务共享UART时,信号量可隐藏在驱动函数中.信号量操作:初始化/建立 INITILIZE/CREATE等待信号/挂起 WAIT/PEND给信号 SIGNAL/POST信号量类型:二进制? ? 0/1计数型? ? 0 ~ 2^width - 1如果某种资源只有1个,可用二进制型信号量,如RS232接口.如果资源有多个,可用计数型信号量,如系统缓冲区一般有多个.死锁:两个任务无限期相互等待对方控制的资源.可用信号量等待超时来化解.事件标志(Event Flag)用于任务与多个事件同步.可用多个事件的组合发信号给多个任务.可将8/16/32个事件标志组合在一起,当任务所需的事件都发生了,任务结束挂起,继续运行任务间通讯(Intertask Communication)两个途径:1.通过全局变量.与中断函数进行通讯只能通过全局变量.2.发送消息给另一个任务.发送消息的方式有邮箱(Mail Box)和消息队列(Message Queue)邮箱(Mail Box)一个任务通过内核服务给另一个任务发消息.内核提供的邮箱服务:邮箱内消息内容初始化;将消息放入邮箱(POST);等待有消息进入邮箱(PEND);例子:TASK1 --(POST)-- MAIL BOX --(PEND)-- TASK2可在主程序中创建邮箱,则在任务中就可直接使用.疑问:也可在任务中创建邮箱,但此时,邮箱能否接收其他任务发送消息?能否发送消息给其他任务?消息队列(Message Queue)实际上是邮箱阵列.任务或ISR可将消息放入消息队列(POST),一个或多个任务可从消息队列中得到消息.传递的消息实际上是传递的指针指向的内容.消息队列的进出通常有规则,如FIFO.例子:ISR --(POST)-- MSG QUEUE --(PEND)-- TASK疑问:消息队列属于某个任务?还是所有任务公用的?任务能从消息队列中取得消息,并执行相应的操作.任务也可以向外发送消息,但是是否应该指明发送的消息是送给谁的?在Windows系统的应用程序中,程序的运行是基于事件驱动,消息循环的.每个应用程序进程都有自己的消息队列.如一个进程1发送消息给进程2,进程2收到消息便继续往下执行,否则就挂起什么都不干.也即是没有事件的驱动,程序是不往下运行的.程序的运行就是依靠不断的消息循环来进行下去,程序从消息队列中接收自己的消息,而发送消息时需指明将消息送给哪个进程.某一个进程发送一条消息,指明了需要送给哪个进程,该消息进入系统的消息队列,系统将该则消息投递到目的进程的消息缓存中.而接收消息的进程则读取消息并处理消息.在这个过程中,系统就像一个邮局,进程发送消息就像寄信,系统投递消息就像邮递员送信.在uC/OS中,可以创建一个消息队列,并返回一个该消息队列的标识,用户任务就可以通过这个标识向队列中发送消息或接收消息,这样看来不在发送消息时指定接收消息的任务是可以的.但当任务较多,且创建了较多的消息队列后,多个任务使用消息队列时是否会产生误发送或误接收等问题.对于uC/OS中的其他类型资源如Mail Box也是如此.用户应用uC/OS系统的框架:main(){? ? ...? ? OSInit();? ? ...? ? OSTaskCreate();? ? ...? ? OSStart();}OSInit()会进行一些初始化,包括Mail Box,
您可能关注的文档
- FWLZ-1dw用户手册.doc
- GCT数学串讲-1算术.ppt
- GCT数学串讲-2初等代数.ppt
- GCT数学串讲-3几何三角.ppt
- Gentoo livecd移置到硬盘.doc
- GIS04空间数据库—付朝宗.ppt
- Excel经典教材.doc
- Go for it 7AU11 句型-学生学案.doc
- Go for it 7AU11 词组-学生学案.doc
- gmat3必威体育精装版(problem).doc
- 四川省德阳市罗江中学2025届高三考前热身化学试卷含解析.doc
- 山东省枣庄现代实验学校2025届高三下学期第五次调研考试化学试题含解析.doc
- 吉林省长春市十一高中等九校教育联盟2025届高三一诊考试生物试卷含解析.doc
- 2025届江苏省盐城市伍佑中学高考仿真模拟化学试卷含解析.doc
- 2025届广西贺州中学高考冲刺押题(最后一卷)生物试卷含解析.doc
- 安徽省池州市贵池区2025届高三第一次模拟考试生物试卷含解析.doc
- 宁夏银川一中2025届高三(最后冲刺)化学试卷含解析.doc
- 广东省广州市增城区四校联考2025届高考压轴卷化学试卷含解析.doc
- 2025届邯郸市第一中学高考生物必刷试卷含解析.doc
- 2025届安徽省安庆市石化第一中学高考仿真卷化学试卷含解析.doc
文档评论(0)