C语言嵌入式系统编程修炼之背景篇

2016-02-19 19:15 0 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的C语言嵌入式系统编程修炼之背景篇教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择。 !-- frame contents -- !-- /frame contents -- 而与之相比,C语言--一种"高级的低级"语言,则成为嵌入式系统开发的最佳选择。笔者在嵌入式系统项目的开发过程中,一次又一次感受到C语言的精妙,沉醉于C语言给嵌入式开发带来的便利。
  
  图1给出了本文的讨论所基于的硬件平台,实际上,这也是大多数嵌入式系统的硬件平台。它包括两部分:
  
  (1) 以通用处理器为中心的协议处理模块,用于网络控制协议的处理;
  
  (2) 以数字信号处理器(DSP)为中心的信号处理模块,用于调制、解调和数/模信号转换。
  
  本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧。而DSP编程则重点关注具体的数字信号处理算法,主要涉及通信领域的知识,不是本文的讨论重点。
  
  着眼于讨论普遍的嵌入式系统C编程技巧,系统的协议处理模块没有选择非凡的CPU,而是选择了众所周知的CPU芯片--80186,每一位学习过《微机原理》的读者都应该对此芯片有一个基本的熟悉,且对其指令集比较熟悉。80186的字长是16位,可以寻址到的内存空间为1MB,只有实地址模式。C语言编译生成的指针为32位(双字),高16位为段地址,低16位为段内编译,一段最多64KB。
  
  
  图1 系统硬件架构
  协议处理模块中的FLASH和RAM几乎是每个嵌入式系统的必备设备,前者用于存储程序,后者则是程序运行时指令及数据的存放位置。系统所选择的FLASH和RAM的位宽都为16位,与CPU一致。
  
  实时钟芯片可以为系统定时,给出当前的年、月、日及具体时间(小时、分、秒及毫秒),可以设定其经过一段时间即向CPU提出中断或设定报警时间到来时向CPU提出中断(类似闹钟功能)。
  
  NVRAM(非易失去性RAM)具有掉电不丢失数据的特性,可以用于保存系统的设置信息,譬如网络协议参数等。在系统掉电或重新启动后,仍然可以读取先前的设置信息。其位宽为8位,比CPU字长小。文章特意选择一个与CPU字长不一致的存储芯片,为后文中一节的讨论创造条件。
  
  UART则完成CPU并行数据传输与RS-232串行数据传输的转换,它可以在接收到[1~MAX_BUFFER]字节后向CPU提出中断,MAX_BUFFER为UART芯片存储接收到字节的最大缓冲区。
  
  键盘控制器和显示控制器则完成系统人机界面的控制。
  
  以上提供的是一个较完备的嵌入式系统硬件架构,实际的系统可能包含更少的外设。之所以选择一个完备的系统,是为了后文更全面的讨论嵌入式系统C语言编程技巧的方方面面,所有设备都会成为后文的分析目标。
  
  嵌入式系统需要良好的软件开发环境的支持,由于嵌入式系统的目标机资源受限,不可能在其上建立庞大、复杂的开发环境,因而其开发环境和目标运行环境相互分离。因此,嵌入式应用软件的开发方式一般是,在宿主机(Host)上建立开发环境,进行应用程序编码和交叉编译,然后宿主机同目标机(Target)建立连接,将应用程序下载到目标机上进行交叉调试,经过调试和优化,最后将应用程序固化到目标机中实际运行。
  
  CAD-UL是适用于x86处理器的嵌入式应用软件开发环境,它运行在Windows操作系统之上,可生成x86处理器的目标代码并通过PC机的COM口(RS-232串口)或以太网口下载到目标机上运行,如图2。其驻留于目标机FLASH存储器中的monitor程序可以监控宿主机Windows调试平台上的用户调试指令,获取CPU寄存器的值及目标机存储空间、I/O空间的内容。
  
  
  图2 交叉开发环境
  后续章节将从软件架构、内存操作、屏幕操作、键盘操作、性能优化等多方面阐述C语言嵌入式系统的编程技巧。软件架构是一个宏观概念,与具体硬件的联系不大;内存操作主要涉及系统中的FLASH、RAM和NVRAM芯片;屏幕操作则涉及显示控制器和实时钟;键盘操作主要涉及键盘控制器;性能优化则给出一些具体的减小程序时间、空间消耗的技巧。
  
  在我们的修炼旅途中将经过25个关口,这些关口主分为两类,一类是技巧型,有很强的适用性;一类则是常识型,在理论上有些意义。
  
  So, let’s go. 更多内容请看.NET移动与嵌入式技术 
    C/C++进阶技术文档  Java编程开发手册专题,或

来源:https://www.tulaoshi.com/n/20160219/1620462.html

延伸阅读
标签: PHP
1 引言 Linux由于其具有内核强大且稳定,易于扩展和裁减,丰富的硬件支持等诸多优点,在嵌入式系统中得到了广泛的应用。很多嵌入式Linux系统,特别是一些具有与用户强交互的嵌入式系统,往往需要配备一个特殊键盘,此时开发者需要根据实际情况,为自己的特殊键盘编写驱动程序。 2 Linux键盘驱动简介 Linux中的...
标签: 电脑入门
多媒体时代的电子文档、表格、演示,大量运用图片、图表、公式、声音、动画等嵌入式对象,在增添了作品的表现力的同时,也给作者的编辑工作带来了一定的难度。不过,您别急,WPS全新推出的校园版及在线升级过的抢鲜版集成了对象图层工具,可以助您一臂之力。 一、认识对象图层工具及按纽。您可以在插件工具栏中可以找到对象图层,也可以打开WP...
C语言高效编程的几招 华中科技大学 丁学 本文出处:《单片机与嵌入式系统应用》2003.9 引言: 编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教。 第一招:以空间换时间 计...
C#是纯粹的面向对象编程语言,它真正体现了一切皆为对象的精神。在C#中,即使是最基本的数据类型,如int,double,bool类型,都属于System.Object类型。此外,使用C#编程,不会存在与游离于对象之外的属于过程的东西。因此,学习C#,就必须具有面向对象思想,不明白所谓的面向对象思想,就不可能掌握C#的精髓,而对于C#的理解,就只能仅限...
最近参与的project中需要把用户登录嵌入一个file open对话框,让用户在打开云端文件之前确认登录。 Existing方案: 将用户登录相关功能集成到一个Combo Box中,用户通过其显示窗口描述当前用户账户状态。 –用户已登入账户,显示其用户名 Sign in–用户尚未登入账户,选择该command进行登录操作 Sign out用户已经登入账户...

经验教程

297

收藏

52
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部