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