随着嵌入式硬件技术越来越成熟,慢慢嵌入式
开发的精力从硬件中解放出来,逐步转移至
软件开发方面,尤其在智能系统的使用上,嵌入式软件开发层面的任务也越来越多,逐渐向大规模软件方向发展。如果是将嵌入式软件开发作为自己未来的发展方向,学习
嵌入式软件开发,需要学习哪些基础知识?
1、嵌入式系统的组成 嵌入式系统由嵌入式软件和嵌入式硬件组成,嵌入式软件包括初始化代码、嵌入式操作系统、驱动程序、应用程序等,嵌入式硬件包括微处理器为核心的存储系统和I/O系统。
2、嵌入式软件分类 嵌入式软件按照应用对象不同,分为系统软件、应用软件、辅助软件三种。其中,系统软件用于控制管理系统资源,比如嵌入式操作系统和中间件等;辅助软件主要是指辅助进行嵌入式系统开发的工具软件,比如系统
设计工具,系统仿真工具、系统测试工具、交叉编译工具等;应用软件主要面向嵌入式应用领域,相应用户需求,比如机顶盒、手机软甲等具体的产品。
3、嵌入式系统特点 嵌入式系统是特殊的工程系统,需要满足“占用资源少,实时性强,剪裁性好,扩展性好,可靠性高,功耗低,软硬件关联密切”等特征,给嵌入式开发带来各种技术挑战。作为开发人员必须在相应用户需求的前提下,尽量多的实现上述嵌入式的特征。
4、嵌入式软件体系结构 体系结构可以划分为两类:有OS和无OS的系统。无OS的系统通过简单轮转程序,直接操作硬件设备,效率高,可靠性高,但不易拓展,处理问题单一。另一方面,有OS的产品可以通过OS提供的软件平台支持,满足大量的特征需要。提高开发效率。
5、嵌入式软件开发环境 详细来讲,软件开发环境在嵌入式领域有三个层面的内容:编程环境、运行环境、执行环境。其中,编程环境多指支持编程开发的所有集成环境;运行环境是支持程序运行的所有软件架构;执行环境是支持程序运行的所有硬件环境。对于软件实现来讲,我们应该从下向上搭建环境,即,首先建立硬件环境、然后建立软件环境,此处也只开发端主机环境,随后建立编程环境。基于这些条件,我们才有可能进行软件仿真和实现。
6、本地开发VS嵌入式开发 程序开发环境和运行环境重叠的情况,我们成为本地开发。对底层实现依赖较少,开发过程更容易流程化,规范化,程序复用率也高。但对于嵌入式开发而言,其面对的是交叉平台环境,开发期间,必须解决如何将程序镜像下载到开发板;应该知道程序镜像在运行时候,从哪里加载入内存,如何加载;应该知道如何开发和调试系统。总的来说,嵌入式开发人员要参与本地开发所不必顾虑的程序编译、装载、链接的过程。
7、存储类型与作用域 C语言中变量的属性由数据类型和存储类型决定。数据类型决定了变量所占的存储空间的大小和操作方式,存储类型则决定了变量的时空特性,即生命期和作用域。在C语
言中有4种存储类型关键字: auto、static、extern、register。
8、局部变量VS全局变量 auto定义,在函数内部可见,存储在栈中,初值不确定。另一方面,全局变量定义在函数外,存储在全局数据区,从定义开始往后都可见。如果想在前边使用,则extern关键字进行声明。全局变量自动赋值为0。
9、静态局部VS静态全局 静态变量在函数结束后都会保持变量的值,其内容存储在全局数据区,由static声明,自动赋值为0。虽然如此,但是其作用域不变,只是保存了函数执行的历史。另一方面,静态全局变量与全局变量区别是其作用域不同,加static关键字以后,只能够在本文件内部使用这个全局变量。
为了扩展函数变量的作用域,可以使用extern关键字。
10、寄存器变量 register变量是一个充满争议的变量类型。由于编译器的不同处理方式,其使用起来也充满不确定性。但是,一般情况下,我们习惯将常用的整形,字符型变量声明成寄存器型,期待运行的时候能够把高频变量存储在寄存器中来提高程序运行的效率。
11、程序实现 随着嵌入式技术的发展,嵌入式软件工程过程规范化已经基本成型。程序设计过程跟通用软件的设计过程相当。在
嵌入式软件开发过程中,可以分为模块设计、硬件接口设计、数据结构设计、算法设计等多个方面。而设计初期使用的方法也与通用软件相似,比如使用结构化设计方式,数据流图、结构模型等,当然也可以引入UML等面向对象的设计方案。最终将软件设计成型后,可以通过IDE进行仿真,测试,调错等步骤。
(一品
威客 anyi)