网站大量收购闲置独家精品文档,联系QQ:2885784924

c语言将嵌入式开发.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言将嵌入式开发

C语言嵌入式开发 纲要 嵌入式C开发背景介绍 硬件平台和交叉编译环境 软件结构设计 内存操作 屏幕操作 键盘操作 性能优化 背景 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,由于汇编语言开发的复杂性,它并不是嵌入式系统开发的一般选择。而与之相比,C语言--一种高级的低级语言,则成为嵌入式系统开发的最佳选择。 硬件平台 (1) 以通用处理器为中心的协议处理模块,用于网络控制协议的处理; (2) 以数字信号处理器(DSP)为中心的信号处理模块,用于调制、解调和数/模信号转换 硬件说明 CPU:80186字长是16位,可以寻址到的内存空间为1MB FLASH和RAM几乎是每个嵌入式系统的必备设备,前者用于存储程序,后者则是程序运行时指令及数据的存放位置。系统所选择的FLASH和RAM的位宽都为16位,与CPU一致 实时钟芯片可以为系统定时,给出当前的年、月、日及具体时间(小时、分、秒及毫秒),主要作用是提供中断裁决 NVRAM(非易失去性RAM)具有掉电不丢失数据的特性,可以用于保存系统的设置信息 UART则完成CPU并行数据传输与RS-232串行数据传输的转换 键盘控制器和显示控制器则完成系统人机界面的控制 交叉编译环境 软件结构设计 模块划分 多任务还是单任务 单任务程序典型架构 中断服务程序 硬件驱动模块 C的面向对象化 模块划分 硬件驱动模块,一种特定硬件对应一个模块; 软件功能模块,其模块的划分应满足低偶合、高内聚的要求 硬件驱动模块 中断服务程序ISR 硬件初始化   a.修改寄存器,设置硬件参数(如UART应设置其波特率,AD/DA设备应设置其采样速率等);   b.将中断服务程序入口地址写入中断向量表: 3.设置CPU针对该硬件的控制线 a.如果控制线可作PIO(可编程I/O)和控制信号用,则设置CPU内部对应寄存器使其作为控制信号;   b.设置CPU内部的针对该设备的中断屏蔽位,设置中断方式(电平触发还是边缘触发)。 4.提供一系列针对该设备的操作接口函数。例如,对于LCD,其驱动模块应提供绘制像素、画线、绘制矩阵、显示字符点阵等函数;而对于实时钟,其驱动模块则需提供获取时间、设置时间等函数。 多任务还是单任务 所谓单任务系统是指该系统不能支持多任务并发操作,宏观串行地执行一个任务。而多任务系统则可以宏观并行(微观上可能串行)地同时执行多个任务 单任务用于简单的低端硬件平台,比如哑终端之类的,使用死循环处理任务流程 多任务用于较高端的平台,如uclinux,Win ce,Vxworks,使用中断调用处理任务流程 单任务程序典型架构 从CPU复位时的指定地址开始执行; 跳转至汇编代码startup处执行; 跳转至用户主程序main执行,在main中完成: a.初试化各硬件设备; b.初始化各软件模块; c.进入死循环(无限循环),调用各模块的处理函数 中断服务程序  中断是嵌入式系统中重要的组成部分,但是在标准C中不包含中断。许多编译开发商在标准C上增加了对中断的支持,提供新的关键字用于标示中断服务程序(ISR),类似于__interrupt、#program interrupt等。当一个函数被定义为ISR的时候,编译器会自动为该函数增加中断服务程序所需要的中断现场入栈和出栈代码。 中断服务程序需要满足如下要求:   (1)不能返回值;   (2)不能向ISR传递参数;   (3) ISR应该尽可能的短小精悍;   (4) printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用。 C的面向对象化 #ifndef C_Class #define C_Class struct #endif C_Class A {  C_Class A *A_this; /* this指针 */  void (*Foo)(C_Class A *A_this); /* 行为:函数指针 */  int a; /* 数据 */  int b; }; 内存操作篇 数据指针 函数指针 数组vs.动态申请 关键字const 关键字volatile CPU字长与存储器位宽不一致处理 数据指针 嵌入式编程中需要指针直接操作内存 某I/O芯片被定位在CPU的存储空间而非I/O空间,而且寄存器对应于某特定地址; 两个CPU之间以双端口RAM通信,CPU需要在双端口RAM的特定单元(称为mail box)书写内容以在对方CPU产生中断 读取在ROM或FLASH的特定单元所烧录的汉字和英文字模。 函数指针 C语言中函数名直

文档评论(0)

150****4233 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档