- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 嵌入式应用程序设计 6.1 引 言 嵌入式程序的创建是嵌入式系统设计的核心。与编写PC程序不同,编写嵌入式代码需要满足多种约束条件。设计嵌入式代码不仅需要提供丰富的功能,通常也必须满足一定的运行速率、功耗和适应内存容量限制等。因此,在嵌入式程序的设计过程中需要用到一些特有的技术和方法。 随着编译技术、处理器和内存的不断发展,采用高级语言设计应用程序已经变得越来越通用。当编译程序不能产生理想的结果时,程序的部分内容可能仍然需要用汇编语言编写。但是,本章的重点是介绍高级语言(主要是C语言)程序设计,因为采用高级语言更容易理解和分析程序的功能。 6.2节为嵌入式程序设计方法,主要介绍嵌入式程序设计用到的设计范型和编程模型方法。6.3节为嵌入式程序设计技术,主要介绍多任务环境下一些典型的程序设计范例。6.4节为嵌入式程序优化,内容包括程序执行时间、能量以及程序长度的优化。 6.2 程序设计方法6.2.1 设计范型 设计范型是解决一类特定问题的方法的通用描述。嵌入式系统广泛使用了两种不同类型程序的设计范型:状态机和循环缓冲区。状态机非常适合于诸如用户界面这样的反应系统。循环缓冲区在数字信号处理中非常有用。 1.状态机 对于非周期性输入的系统,根据输入和当前系统状态,通过有限状态机的方式能够很方便地描述系统的响应。通常,有限状态机在硬件设计时会用到,而编程的状态机类型也是嵌入式计算的一种有效实现。下面给出一个C状态机的示例,如图6-1所示。 图6-1 C状态机示例 根据状态机的描述,系统工作情况是:当座位上无人时,Idle状态被激活;当有人坐下时进入Seated状态并打开计时器;如果计时器在安全带系牢之前关闭(即超时),则转入Buzzer状态,反之进入Belted状态;当人离开座位时,回到Idle状态。 下面再用C语言编写这些行为。假设已经将三个输入(seat,belt,timer)的当前值载入变量,并临时保持输出到变量(timer_on,buzzer_on)中。变量state用来保持当前状态。使用switch语句来决定每个状态所采取的行动。代码如下: 2.循环缓冲区 在嵌入式系统中,程序不仅需要实时输出结果,而且需要尽量少地使用内存。因此使用循环缓冲区是处理流数据的有效方式。下面以一个FIR过滤器的实现来介绍循环缓冲区的使用。 FIR过滤器要求对每一个样本必须产生一个依赖于最后n个输入值的输出。使用循环缓冲区用来存储数据流的子集。算法在每个时刻都形成一个到流窗口的数据流子集。当抛弃旧值加入新值时,窗口将随着时间滑动。由于窗口尺寸不变,因此可以使用固定尺寸的缓冲区来存储当前数据。缓冲区使用指针指向下一个样本将要放置的位置;每增加一个样本,就自动覆盖需要移出的旧样本。指针到达缓冲区尾部时会绕回到顶部。图6-2解释了循环缓冲区的工作原理。 图6-2 存放流数据的循环缓冲区 6.2.2 编程模型 使用编程模型能够比使用源代码更容易地进行更有用的分析。在编程模型的基础上可以更清晰地使用汇编语言或高级语言编写程序。编程模型的基础是控制/数据流图(CDFG)。CDFG用来构造模型的数据操作(计算)和控制操作(条件)。CDFG的特征是将控制和数据结构进行结合。 CDFG使用数据流图作为其元素,包含两个基本的节点:判定节点和数据流节点。数据流节点封装了一个完整的数据流图,用来表示一个基本块。在顺序结构的程序中使用一种类型的判定节点能够描绘所有类型的控制(跳转/分支)。 以下是一点控制结构的C代码和控制/数据流图(见图6-3)。图中的矩形节点表示基本块,可通过简单函数调用表示;菱形节点表示条件,可通过标记赋给,同时用判断条件的可能结果标记边。 图6-3 一点控制结构的控制/数据流图 以下是while循环的C代码和控制/数据流图(见图6-4)。while循环由一个判断和一个循环体组成,而for循环可以由while循环定义,因此该CDFG同样能够表示for循环。 while(ab){ a=proc1(a,b); b=proc2(a,b); } 图6-4 while循环的控制/数据流图 6.3 程序设计技术6.3.1 消息 在多任务系统中,消息是任务间相互通信的常用手段。在系统的主任务中可以使用以下代码来实现消息循环: 在上述代码中使用了几个API函数。其中,WaitMessage()函数用来实现等待消息。参数0表示等待的超时时间为无穷,即除非主任务接收到消息,否则此函数不会返回。Wait Message函数返回的是一个指向系统的消息结构的指针。系统的消息结构定义如下: typedef struct{ U32 Messa
您可能关注的文档
- (机电一体化控制技术与系统)第1章机电一体化概论.ppt
- (机电一体化控制技术与系统)第2章精密机械技术.ppt
- (机电一体化控制技术与系统)第3章工业控制计算机.ppt
- (机电一体化控制技术与系统)第4章基于单片机的控制器.ppt
- (机电一体化控制技术与系统)第5章可编程序控制器.ppt
- (机电一体化控制技术与系统)第6章传感器与计算机接口.ppt
- (机电一体化控制技术与系统)第7章动力驱动及其计算机控制.ppt
- (机电一体化控制技术与系统)第9章机电一体化系统的常用控制策略.ppt
- (机电一体化控制技术与系统)第10章机电一体化系统设计方法与实例.ppt
- 大学生公共礼仪第八章宴请及送礼礼仪.pptx
最近下载
- 头皮知识课件.pptx VIP
- 2025年安徽省普通高中学业水平合格性考试信息技术和通用技术上机真题卷3.docx VIP
- 第五章第二节创新实验:铜与硝酸 说课稿 2023-2024学年高一下学期化学人教版(2019)必修第二册.docx VIP
- 2025第九届“学宪法、讲宪法”知识竞赛题库(+答案解析)(中小学组).docx VIP
- 数据挖掘与机器学习全套教学课件.pptx
- 哈希cod_max_培训教材.ppt VIP
- 第五章第二节创新实验:铜与硝酸 教学设计 2023-2024学年高一下学期化学人教版(2019)必修第二册.docx VIP
- 建筑项目设计与施工配合措施.docx VIP
- 2025年辅警考试题库公安辅警.doc VIP
- 中国银行存款证明 正面资料.doc VIP
文档评论(0)