嵌入式软件开发技术与工具-基础篇(1)

推荐书目

1. KarimYaghmour,《Building Embedded Linux Systems》, O'Reilly 2003
2. Qing Li and Carolyn Yao,Real-Time Concepts for Embedded Systems,CMP Books © 2003
3. Michael Barr and Anthony Massa, Programming Embedded Systems with C and GNU Development Tools,O‘Reilly 2006
4. Daniel P.Bovet and Marco Cesati, Understanding the Linux Kernel, 3rd Edition, O'Reilly 2006
5. David A. Rusling等,Linux Programming White Papers,2000

6. 孙琼,《嵌入式Linux应用程序开发详解》,人民邮电出版社,2006
7. 任哲,潘树林,房红征《嵌入式操作系统基础μC/OS-II和Linux 》;北京航空航天大学出版社,2006
8. 王田苗,魏洪兴《嵌入式系统设计与实例开发》,清华大学出版社,2008
9. MPC860 Processor Card User’s Manual, MPC860 Training Materials.
10.陈文智,王总辉《嵌入式系统原理与设计》,清华大学出版社,2011

内容概述

第1讲:嵌入式软件开发概述
第2讲:嵌入式软件开发环境概述
第3讲:嵌入式Linux 简介
第4讲:可执行影像到目标机的映射
第5讲:嵌入式软件开发工具概述
第6讲:嵌入式Linux开发工具介绍
第7讲:嵌入式系统初始化过程分析与bootloader技术
第8讲:Linux内核分析与移植

第9讲:嵌入式文件系统分析与移植
第10讲:嵌入式软件开发-I/O编程
第11讲:嵌入式软件开发-设备驱动
第12讲:嵌入式软件开发-进程控制
第13讲:嵌入式软件开发-进程同步与通信
第14讲:嵌入式软件开发-多线程编程
第15讲:嵌入式软件开发- GUI编程
第16讲:嵌入式软件开发-网络编程

实验一:Linux基础实验
实验二:构建ARM Linux开发环境(Host+)
实验三:构建ARM Linux目标系统(Target)
实验四:gdb交叉调试技术实验
实验五:设备驱动编程实验
实验六:串口与网络通信实验

小问题:

1. 嵌入式系统有哪些特点,它们是如何影响到嵌入式软件开发的。
2. 嵌入式软件的分类,并分别描述其特性和用途。
3. 通用软件与嵌入式软件开发的区别。
4. c语言中各类变量的存储与作用域。
5. Host 和Target之间的连接方式,各有何特点。
6. Execution Environment包含哪些内容。
7. Run-Time Environment包含哪些内容。
8. Programming Environment包含哪些内容。

第一讲 嵌入式软件开发概述

1.嵌入式系统的组成

嵌入式系统由嵌入式软件和嵌入式硬件组成,嵌入式软件包括初始化代码、嵌入式操作系统、驱动程序、应用程序等,嵌入式硬件包括微处理器为核心的存储系统和I/O系统。其逻辑架构,如图1.1

image

图1.1嵌入式系统架构

2.嵌入式软件分类

嵌入式软件按照应用对象不同,分为系统软件、应用软件、辅助软件三种。其中,系统软件用于控制管理系统资源,比如嵌入式操作系统和中间件等;辅助软件主要是指辅助进行嵌入式系统开发的工具软件,比如系统设计工具,系统仿真工具、系统测试工具、交叉编译工具等;应用软件主要面向嵌入式应用领域,相应用户需求,比如机顶盒、手机软甲等具体的产品。

3.嵌入式系统特点

嵌入式系统是特殊的工程系统,需要满足“占用资源少,实时性强,剪裁性好,扩展性好,可靠性高,功耗低,软硬件关联密切”等特征,给嵌入式开发带来各种技术挑战。作为开发人员必须在相应用户需求的前提下,尽量多的实现上述嵌入式的特征。

4.嵌入式软件体系结构

体系结构可以划分为两类:有OS和无OS的系统。无OS的系统通过简单轮转程序,直接操作硬件设备,效率高,可靠性高,但不易拓展,处理问题单一。另一方面,有OS的产品可以通过OS提供的软件平台支持,满足大量的特征需要。提高开发效率。

5.本地开发VS嵌入式开发

程序开发环境和运行环境重叠的情况,我们成为本地开发。对底层实现依赖较少,开发过程更容易流程化,规范化,程序复用率也高。但对于嵌入式开发而言,其面对的是交叉平台环境,开发期间,必须解决如何将程序镜像下载到开发板;应该知道程序镜像在运行时候,从哪里加载入内存,如何加载;应该知道如何开发和调试系统。总的来说,嵌入式开发人员要参与本地开发所不必顾虑的程序编译、装载、链接的过程。典型的嵌入式程序开发流程如图2。

image

图1.5典型的嵌入式系统生命周期

6存储类型与作用域

C语言中变量的属性由数据类型和存储类型决定。数据类型决定了变量所占的存储空间的大小和操作方式,存储类型则决定了变量的时空特性,即生命期和作用域。在C语
言中有4种存储类型关键字: auto、static、extern、register。内存区和其中内容如表1.6

内存区 存储内容
代码段 代码
全局数据区 全局变量和静态变量
动态分配的内存区
局部变量

7局部变量VS全局变量

auto定义,在函数内部可见,存储在栈中,初值不确定。另一方面,全局变量定义在函数外,存储在全局数据区,从定义开始往后都可见。如果想在前边使用,则extern关键字进行声明。全局变量自动赋值为0。

8静态局部VS静态全局

静态变量在函数结束后都会保持变量的值,其内容存储在全局数据区,由static声明,自动赋值为0。虽然如此,但是其作用域不变,只是保存了函数执行的历史。另一方面,静态全局变量与全局变量区别是其作用域不同,加static关键字以后,只能够在本文件内部使用这个全局变量。

为了扩展函数变量的作用域,可以使用extern关键字。

9寄存器变量

register变量是一个充满争议的变量类型。由于编译器的不同处理方式,其使用起来也充满不确定性。但是,一般情况下,我们习惯将常用的整形,字符型变量声明成寄存器型,期待运行的时候能够把高频变量存储在寄存器中来提高程序运行的效率。

10小例子

int global_x; /* 全局变量,固定地址,其他源文件可见*/
extern int global_y; /* 在本文件后面及其它源文件中寻找*/
static int file_static; /* 静态全局变量,固定地址,但只在本文件中可见*/
int foo(int auto_pa )/* 函数参数:位于栈帧当中,动态创建,动态释放*/
{
     static int total_p=1; /*静态局部变量,固定地址,只在本函数中可见*/
     int n, a[10]; /* 局部变量,位于栈帧当中,只在本函数可见*/
     ……
     total _p= total_p +1;
     ……
     register intm = 88; /* 或许存放在寄存器中*/
    double *temp_addr_d= malloc(sizeof(double)*9);
    int *temp_addr_i= malloc(sizeof(int)*8);
    /* 动态申请的内存空间,位于堆当中*/
    ……
    return;
}

你可能感兴趣的:(嵌入式软件开发技术与工具-基础篇(1))