嵌入式C程序架构.pptVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式C程序架构

嵌入式系统程序设计 大连理工大学软件学院 嵌入式系统工程系 赖晓晨 嵌入式C程序架构 嵌入式C程序 人机界面 指针的使用方法 一、嵌入式C程序 模块 任务模式 面向对象的C 模块 模块是指完成某个功能或某些联系紧密的功能的代码,一般由一个源文件(扩展名为c)和一个头文件(扩展名为h)组成. 源文件中一般包含变量的定义、函数的定义等内容。 头文件中一般包含对应源文件中的函数的声明及变量的声明。 头文件中不应该包含导致内存分配的语句,如定义变量。定义变量会产生内存分配的操作。 一个不好的例子 /*test1.h*/ int a = 2; /*test1 .c*/ #include test1.h …… /*test2 .c*/ #include test1.h …… 一个好的例子 任务模式 无限循环的两种方案 while(1) { } for(;;) { } 任务模式(续) 随着大规模集成电路技术的发展,单个芯片内集成的晶体管数目越来越多,从而使得芯片的功能不断增强,出现了各种复杂而强大的嵌入式处理器,处理器内一般集成了ROM、RAM等存储器和多种功能部件以及接口,如果有一个操作系统来控制和管理硬件,使程序员从底层编程中解放出来,从而专注于具体的应用,就可以显著提高开发效率。目前高端处理器一般都先运行一个嵌入式操作系统,然后在此操作系统之上开发各种应用程序。 任务模式(续) 随着半导体技术发展,嵌入式处理器的硬件资源逐渐丰富,运行速度不断提高,功能越来越强大,应用环境越来越复杂,此时,仅仅基于硬件直接编写程序越来越困难,在这个背景下,实时操作系统应运而生。 任务模式(续) 实时操作系统(RTOS)是嵌入式应用软件的基础和开发平台。它包括一个可靠性很高的实时内核,将CPU时间、中断、I/O、定时器等资源都封装起来,向用户提供标准的API,并根据各个任务的优先级,采用各种任务调度算法,合理地在不同任务之间分配CPU时间 面向对象的C 众所周知C语言是面向过程,并不包含面向对象的特性,无法使用面向对象程序设计的思路。由于面向对象的优良特性,如果C语言能具有类似的特点,无疑将使程序开发过程发生本质变化,提高效率。C语言具有结构体以及指针特性,可以用来模拟一个类。 面向对象的C(续) Struct A { int a; /* 数据成员 */ float b; /* 数据成员 */ Struct A *this; /* this指针 */ void (*f)(void); /* 函数指针 */ }; 面向对象的C(续) 可以用结构体类型A模拟一个类,其中的函数指针用来模拟实现类中的成员函数。采用这种结构,可以把数据和函数封装在一起,同时使用结构体变量的包含来模拟继承,部分实现面向对象特性。 二、人机界面 键盘设计 显示设计 键盘设计 按键个数需要根据实际需要来设置,由于按键的机械弹性问题,会导致按键发生抖动,现象为操作人员按键一次,但是硬件认为发生了多次按键,从而造成错误。有两种方式可以完成按键去抖: 硬件方式:基于RS触发器 软件方式:软件延时 键盘控制可以采用ZLG7289控制芯片,这是一种串口芯片,可以连接64键的键盘矩阵,单片即可完成按键识别、去抖等功能。 键盘设计(续) 显示设计 显示部分可以采用LED数码管或者液晶显示器两种方法。 数码管是较为低端的现实设备,按照显示方式分类,可分为静态显示和动态(扫描)显示;按照译码方式可分为硬件译码和软件译码;按硬件连接方式可分为共阴及共阳两种方式。 随着价格的降低,液晶显示器已成为现在嵌入式系统的主流显示设备。基于Linux操作系统的液晶显示器控制软件主要采用帧缓冲技术(Framebuffer)。 显示设计(续) 显示设计(续) Frambuffer是Linux系统中图形硬件设备的抽象,是用户访问图形界面的接口,它允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作,不必关心物理显存的位置、换页机制等具体细节 三、指针的使用方法 指针式C语言的优良特性,指针功能强大、使用灵活,可以实现很多意想不到的功能,但是也因为指针的这个特性,导致使用时如果概念不清,非常容易导致错误,所以一些语言取消了指针的概念。常见指针用法有数据指针、函数指针等。 可以使用指针的特性直接访问内存某个空间,如: unsigned char *p = (unsigned char *)0x0ff; *p=0x5f; 函数指针 函数执行的3个必要条件:函数的入口地址、函数的参数、函数的返回地址。 函数调用的本质是找到函数的入口地址,然后把地址赋值给程序计数器,同时完成参数传递和返回地址入栈。 函数指针(续) 两段代码的唯一区别在于跳转的目的地址不同,第一段跳转到内存

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档