- 1、本文档共82页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(东南大学集成电路课程)任务间通信.ppt
1. 任务间通信的概念 2. 任务间通信的方式 2. 任务间通信的方式 2. 1 竞争的方式 2. 1 竞争的方式 2. 1 竞争的方式 2. 任务间通信的方式 2. 2 协作的方式 2. 2 协作的方式 2. 任务间通信的方式 2. 3 数据传递的方式 2. 3 数据传递的方式 2. 3 数据传递的方式 2. 3 数据传递的方式 3. uC/OS的任务间通信方式 3. uC/OS的任务间通信方式 4. 任务间通信设计参考 程序样例 —临界区保护(互斥) 程序实现 struct { ... } Parameters OS_EVENT *pevent = NULL; pevent = OSSemCreate( 1 ); void Task1( void ) { INT8U err; OSSemPend( pevent, 0, err); /* Set Parameters 临界区*/ OSSemPost( pevent ); } void TaskN( void ) { INT8U err; OSSemPend( pevent, 0, err); /* Read Parameters 临界区*/ OSSemPost( pevent ); } 也可用互斥型信号量实现, 关于uC/OS-II中的互斥信号量请参看教材! 4. 任务间通信设计参考 程序样例 — 任务间同步 程序场景及功能描述 任务1运行至A处,生成数据并写入全局数据区 任务2等待任务1完成写入操作后开始运行,从全局数据区中读出数据进行后续操作 任务2需等待任务1发出信号后方能继续运行,即任务2与任务1同步 (六)信号量 程序样例 —任务间同步 程序实现 struct { ... } Parameters OS_EVENT *pevent = NULL; pevent = OSSemCreate( 0 ); void Task1( void ) { INTU8 err; /* Set Parameters */ OSSemPost( pevent ); } void Task2( void ) { INTU8 err; OSSemPend( pevent, 0, err); /* Read Parameters 继续运行 */ } 任务2先运行至此挂起 发出信号同步任务2 在uC/OS-II中也可采用事件标志 进行同步,请参看教材! 4. 任务间通信设计参考 程序样例 — 用邮箱发送消息 程序场景及功能描述 任务1运行过程中需对一段连续内存区域进行写操作,并需要将该部分内容传送给任务2使用 任务2在任务1完成写操作前处于等待状态 该连续内存区域的首地址不固定 4. 任务间通信设计参考 程序样例 — 用邮箱发送消息 程序实现 OS_EVENT *MsgBox; INT8U CommBuf[100]; void Task1( void ) { INT8U err; int i; ... err = OSMboxPost( MsgBox, (void*)CommBuf[i]); ... } void Task2( void ) { INT8U err; void *msg = NULL; MsgBox = OSMboxCreate( (void*)0 ); msg = OSMboxPend( MsgBox, 0, err); /*后续处理*/ } 4. 任务间通信设计参考 程序样例 — 用邮箱实现二值信号量 程序实现 首先,在初始化时,将邮箱设置为一个非零的指针(如 void *1) 这样,一个任务可以调用OSMboxPend()函数来请求一个信号量 然后通过调用OSMboxPost()函数来释放一个信号量 4. 任务间通信设计参考 程序样例 — 用邮箱实现二值信号量 } } OSMboxPost(MboxSem, (void*)1); /* 释放对资源的访问权 */ . . /* 任务获得信号量,对资源进行访问 */ . OSMboxPend(MboxSem, 0, err); /* 获得对资源的访问权 */ for (;;) { INT8U err; { void Task1 (void *pdata) OS_EVENT *MboxSem; 4. 任务间通信设计参考 程序样例 — 用邮箱实现延
您可能关注的文档
- 效用论.ppt
- 人类遗传病 课件 (人教版必修二).ppt
- 命题及其关系充分条件与必要条件.ppt
- 垄断竞争与寡头垄断.ppt
- 寡头垄断市场.ppt
- 屈服条件.ppt
- 总供给与总需求.ppt
- 成本曲线.ppt
- 成本最小化.ppt
- 预算约束.ppt
- 数据仓库:Redshift:Redshift与BI工具集成.docx
- 数据仓库:Redshift:数据仓库原理与设计.docx
- 数据仓库:Snowflake:数据仓库成本控制与Snowflake定价策略.docx
- 大数据基础:大数据概述:大数据处理框架MapReduce.docx
- 实时计算:GoogleDataflow服务架构解析.docx
- 分布式存储系统:HDFS与MapReduce集成教程.docx
- 实时计算:Azure Stream Analytics:数据流窗口与聚合操作.docx
- 实时计算:Kafka Streams:Kafka Streams架构与原理.docx
- 实时计算:Kafka Streams:Kafka Streams连接器开发与使用.docx
- 数据仓库:BigQuery:BigQuery数据分区与索引优化.docx
文档评论(0)