任务的同步与通信.ppt

  1. 1、本文档共108页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
任务的同步与通信.ppt

嵌入式实时操作系统μC/OS-II ——任务的同步与通信 信号量 信号量 信号量 信号量 信号量 消息邮箱——举例1 任务间数据通信 void SendDly (void) { pdata = pdata; while (1) { OSMboxPost(mbox, dly); OSTimeDly(1000); dly = dly + 20; if (dly = 1000) { dly = 20; } } } 发送延时参数消息 防止编译器报警 延时参数大于1000,返回到20 发送延时参数任务SendDly的代码如下。 延时1000个节拍 每次延时参数加20 消息邮箱——举例1 任务间数据通信 LED任务的代码如下。 void TaskLED (void *pdata) { …… mbox = OSMboxCreate(NULL); while (1) { pd = (INT16U *)OSMboxPend(mbox, 0, err); P0.1=0; OSTimeDly(*pd); P0.1=1; OSTimeDly(10); } } 初始化工作 点亮LED 以消息内容为延时参数 熄灭LED 延时10clk 创建消息邮箱 等待消息 消息邮箱——举例2 任务间同步 为了说明如何使用邮箱来实现任务间的同步,我们设计一个系统,按键一按下,LED按照一定的频率闪耀一定的时间,蜂鸣器开启一定的时间。假设TaskLED为高优先级的任务,三个任务的处理流程如下。 消息邮箱——举例2 任务间同步 TaskKEY任务主要代码如下。 void TaskKEY (void *pdata) { …… while (1) { while (无按键) { OSTimeDly(1); } OSMboxPostOpt (mbox, dly, OS_POST_OPT_BROADCAST); while (按键未释放) { OSTimeDly(1); } } } 延时1个节拍,用于任务切换 延时1个节拍,用于任务切换 等待按健按下 等待按健释放 以广播形式发送消息,所有等待此邮箱的任务均获得消息 初始化代码 消息邮箱——举例2 任务间同步 LED任务主要代码如下。 void TaskLED (void *pdata) { …… mbox = OSMboxCreate(NULL); while (1) { pd = (INT16U *)OSMboxPend(mbox, 0, err); for (i = 0; i 10; i++) { P0.1=0; OSTimeDly(*pd); P0.1=1; OSTimeDly(*pd); } } } 初始化工作 点亮LED 熄灭LED 延时相应的时间 创建消息邮箱 等待消息 延时相应的时间 循环10次 消息邮箱——举例2 任务间同步 Beep任务主要代码如下。 void TaskBeep (void *pdata) { …… while (1) { pd = (INT16U *)OSMboxPend(mbox, 0, err); //开启蜂鸣器 ; OSTimeDly(*pd); //关闭蜂鸣器 ; OSTimeDly(50); } } 初始化工作 开启蜂鸣器 关闭蜂鸣器 延时50clk 等待消息 延时相应的时间 程序设计 设计一个应用程序,该程序有两个任务SendTask和ReceiveTask任务。任务SendTask通过邮箱Str_Box将字母“A~Z”发送给ReceiveTask任务。ReceiveTask任务接收并显示所收到的字母。 消息队列 互斥信号量 消息邮箱 消息队列 消息队列就象一个类似于缓冲区的对象,通过

文档评论(0)

docinppt + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档