- 1、本文档共52页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.1—程序设计基础.ppt
任务设计 6.1.2 任务的划分 任务数目合理: 对一个应用系统,合理划分任务的数目,减少通讯工作,减少共享资源的数量,减轻操作系统的负担,减少资源开销。 简化软件系统: 合理划分任务。可以减少操作系统的服务要求,使操作系统的功能得到裁剪,简化软件系统,较少软件的规模。 降低资源要求: 合理划分任务,减少或简化任务之间的同步和通信要求,就可以减少相应数据结构的内存规模,从而降低对系统资源的要求。 信号量 6.6.1 简介 在多任务系统中,信号量被广泛应用于:任务间对共享资源的互斥、任务和中断服务程序之间的同步、任务之间的同步。 在TinyOS51 V1.4中,当任务调用tnOsSemPost()函数发送信号时,如果没有任务获得信号量,则信号量的值加1并返回;如果有任务在等待该信号量,则信号量的值不加1,那么某个获得信号量的任务将得到信号量并进入就绪态(理论上是一个任务发送信息之后信号量加1,然后另一个任务获得信息之后信号量再减1)。等到下次任务调度时,获得信号量的任务就可能运行了。 信号量 如果任务调用tnOsSemPend()函数接收信息时信号量的值大于0,即信号量有效,则信号量的值减1,然后返回信号量的当前值,获得信号量的任务继续运行。 如果任务调用tnOsSemPend()函数接收信息时信号量的值为0,则获得信号量的任务被设置为等待这个信号量的状态,它将等待另一个任务(或中断服务程序)发出信号量后才可能解除该等待信号,或者在超时的情况下运行。 注意: 1.tnOsSemPend()函数允许用户定义一个最长的等待时间作为它的第二个参数,这样可以避免该任务无休止地等待下去。 2.信号量最好在系统初始化的时候创建,不要在系统运行的过程中动态地创建和删除。 信号量 6.6.2 信号量的工作方式 1.同步 在实际的应用中,常用信号量实现同步:任务同步中断服务程序、任务间同步。 在信号量的同步应用中,tnOsSemPend() 函数和tnOsSemPost()函数会出现不同任 务的不同函数中,但不一定成对出现。 一对一是最典型、最常见的工作方式。 注意: 中断服务程序只能调用tnOsSemPost()函数, 而不能调用tnOsSemPend()函数,也就是说只有任务 同步中断,而没有中断同步任务及中断间同步。 任务1 任务2 任务3 任务4 发送信号量 发送信号量 发送信号量 信号量1 接收信号量 信号量 2.资源共享 在嵌入式系统中,一些资源(如只读存储器ROM等)可以被多个任务使用且多任务互不干扰的使用;但大多数资源(如串口等)不能被多任务互不干扰地使用,如果同时对该资源进行操作就可能会产生干扰,造成时许混乱。此时,可以使用信号量来解决上述问题: 1.建立一个信号量用于资源共享,信号量的初始值与资源数目一致。 2.在使用资源前获得信号量。 3.在使用完毕资源后发送信号量。 信号量 3.任务同步中断服务程序 设计一个任务__taskLed(),使用定时器控制LED闪烁频率。该例程中,通过中断服务程序发送信号量,而在另一个任务接收信号量。 程序清单6.9 中断服务程序与任务同步示例 static TN_OS_SEM __GosSem; //定义信号量 /************************************************************************* **Function name: timer1ISR **Descriptions: 定时器1终端处理函数 *************************************************************************/ void timer1ISR(void) __interrupt 3 { static unsigned char ucSum; ucSum++; if(ucSum = 15){ ucSum = 0; tnOsSemPost(__GosSem); } } 信号量 /************************************************************************* **Function name: __timer1Init **Descriptions: 初始化定时器1 *************************************************************************/ static void __timer1Init(void) { E
您可能关注的文档
- 2015年北京第二外国语学院翻译硕士考研真题汇集.doc
- 2015年北京第二外国语学院翻译硕士考研真题笔记.doc
- 2015年北京第二外国语学院翻译硕士考研真题笔记分享.doc
- 2015年北京第二外国语学院翻译硕士考研真题精选.doc
- 2015年北京第二外国语学院翻译硕士考研真题解析.doc
- 2015年北京第二外国语学院翻译硕士考研真题选编.doc
- 2015年对外经济贸易大学翻译硕士日语口译考研真题总结.doc
- 2015年对外经济贸易大学翻译硕士日语口译考研真题汇编.doc
- 2015年对外经济贸易大学翻译硕士日语口译考研真题答案汇编.doc
- 2015年对外经济贸易大学翻译硕士日语口译考研真题答案解析.doc
文档评论(0)