嵌入式系统与技术5教材.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 程序设计和分析 内容提要 嵌入式软件体系结构 程序设计和设计范型 编译方法简介 程序的速度、尺寸、功耗优化 测试程序 软件调制解调器 嵌入式程序的挑战 运行速度:满足时限要求 内存容量限制 功耗 验证程序正确性 高级语言、汇编语言与编译 汇编语言和高级语言C的编程 汇编语言特点 对处理器设备精确控制,利用处理器特征,运行效率高; 代码压缩,占用存储小; 不需要特定编译器和库函数; ARM C与汇编混合编程 _asm:内嵌汇编代码; 嵌入式软件体系结构 轮转结构 带中断的轮转结构 函数队列结构 实时操作系统结构 轮转结构 void main() { while (true) { if (//设备1需要服务) //处理设备1服务 if (//设备2需要服务) //处理设备2服务 … if (//设备n需要服务) //处理设备n服务 } } 轮转结构 特点:简单,没有中断,没有共享数据,不考虑延迟 设备少, 没有特别耗时任务, 没有紧迫的响应需求 缺点: 存在比最坏情况完成一个循环要短的响应时间 冗长的处理时间使响应时间加长 结构脆弱,难以扩展 带中断的轮转结构 bool fDevice1 = false; bool fDevice2 = false; … bool fDeviceN = false; void interrupt vHandleDevice1(){ fDevice1 = true;} void interrupt vHandleDevice2(){ fDevice2 = true;} … void interrupt vHandleDeviceN(){ fDeviceN = true;} 带中断的轮转结构 void main(){ while (true){ if (fDevice1){ fDevice1 = false; //处理设备1数据} if (fDevice2){ fDevice2 = false; //处理设备2数据} … if (fDeviceN){ fDeviceN = false; //处理设备N数据} } } 带中断的轮转结构 特点: 中断程序可以获得很快响应 带优先级的中断使得可以控制不同任务 缺点: 共享数据 中断轮转示例-通信桥接器 通信桥接器 把数据从链路A转发到B,从链路B到A 每当通信链路上到达一个字符,引发一个中断,必须快速响应 CPU一个时刻只能往I/O硬件上写一个字符 一些例程,从队列中读出或向队列中写入字符,它们可以被中断程序和任务代码调用 加密与解密程序一次对一个字符加密 通信桥接器 #define QUEUE_SIZE 100 typedef struct{ char chQueue[QUEUE_SIZE]; int iHead,iTail; } QUEUE; static QUEUE qDataFromLinkA; static QUEUE qDataFromLinkB; static QUEUE qDataToLinkA; static QUEUE qDataToLinkB; static BOOL fLinkAReadyToSend = TRUE; static BOOL fLinkBReadyToSend = TRUE; 通信桥接器 void interrupt vGotCharacterOnLinkA() { char ch; ch = //从通信链路A中读取字符 vQueueAdd(qDataFromLinkA, ch); } void interrupt fLinkAReadyOnLinkA() { char ch; ch = //从通信链路B读取字符 vQueueAdd(qDataFromLinkB,ch); } 通信桥接器 void interrupt vSendCharacterOnLinkA() { fLInkAReadyToSend = TRUE; } void interrupt vSendCharacterOnLinkB() { fLinkBReadyToSend = TRUE; } 通信桥接器 void main(){ char ch; //初始化 vQueueInitialize(qDataFromLinkA); vQueueInitialize(qDataFromLinkB); vQueueInitialize(qDataToLinkA); vQueueInitialize(qDataToLinkB); //允许中断 enable(); } 通信桥接器 while (TRUE){ v

文档评论(0)

阿里山的姑娘 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档