Presentation is loading. Please wait.

Presentation is loading. Please wait.

第6章 嵌入式软件开发基础.

Similar presentations


Presentation on theme: "第6章 嵌入式软件开发基础."— Presentation transcript:

1 第6章 嵌入式软件开发基础

2 第6章 嵌入式软件开发基础 6.1 嵌入式软件开发语言 6.2 嵌入式软件开发流程 6.3 调试工具和方法 6.4 C语言程序的结构
第6章 嵌入式软件开发基础 6.1 嵌入式软件开发语言 6.2 嵌入式软件开发流程 6.3 调试工具和方法 6.4 C语言程序的结构 6.3 仿真环境

3 6.1 嵌入式软件开发语言 汇编(与体系结构相关) C语言(最常用语言) C++语言(面向对象,C语言的扩展)
JAVA(面向对象,可移植性强) 脚本语言(不需要编译) C语言折中了与硬件相近和可以屏蔽不同体系结构相关两方面的,最适合嵌入式系统使用。

4 6.2 嵌入式软件开发流程 嵌入式应用的生成特点 编译 汇编 链接 加载程序

5 嵌入式应用的生成特点 C语言程序的生成分成编译、汇编、链接等几个步骤。最终的目标的文件的主要部分是处理器可执行的机器代码组合。根据系统的不同,目标文件可能除了可执行的二进制代码部分外,还包括一定的头。

6 嵌入式应用的生成特点 ADS(Arm Developer Suite),主要需要使用以下工具:
编译器:armcc.exe(编译成ARM指令汇编)和tcc.exe(编译成Thumb指令汇编) 汇编器:armasm.exe 链接器:armlink.exe ARM-Linux GCC交叉编译系统,则主要使用以下工具: 编译器:arm-lixux-gcc(可以统一编译-汇编过程) 汇编器:arm-linux-as 链接器:arm-linux-ld

7 嵌入式应用的生成特点

8 编译(Compile) 编译(Compile)是指从高级语言转换成汇编语言的过程。从本质上编译是一个文本转换的过程(从文本文件到文本文件)。编译包含了C语言的语法解析和生成汇编语言两个步骤。

9 汇编 (Assemble) 汇编(Assemble)是指从汇编语言程序生成目标系统的二进制代码(机器代码)的过程。相对于编译过程的语法解析,汇编的过程相对简单。这是因为对于一款特定的处理器,其汇编语言和二进制的机器代码是一一对应的。

10 链接(Link) 链接(Link)过程将汇编成的多个机器代码组合成一个可执行程序。一般来说,通过编译和汇编过程,每一个源文件将生成一个目标文件。链接器的作用就是将这些目标文件组合,组合的过程包括了代码段、数据段等部分的合并,以及添加相应的文件头。

11 6.3 调试工具和方法 嵌入式调试的特点 打印调试信息 JTAG调试 远程gdb调试

12 嵌入式调试的特点 在嵌入式系统中,调试的概念相对复杂。对于其调试过程,程序主体运行在目标机上,主机所起的作用是获得程序运行中的信息,并通过人工或者程序的方式分析这些信息。因此嵌入式调试的基础是需要一条从主机到目标机的通讯通道。

13 打印调试信息 打印调试信息是基本的调试方式, printf()标准输出,在嵌入式系统中,这种输出的通讯通道可能是串口或者网络协议。在某些系统中,没有实现标准输出,这就需要开发者自己开发调试手段。

14 JTAG调试 JTAG是Joint Test Action Group的简称。JTAG使用边界扫描(Boundary-Scan)的方式调试:在正常的运行状态下,这些边界扫描寄存器对于芯片是透明的;在调试的运行状态下,通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。

15 远程GDB调试 在远程GDB调试中,调试器是运行在主机(host,桌面电脑)的应用程序, 被调试的程序是运行在目标(target)上。它通过插桩(stub)的方式实现,即在目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试。调试器与被调程序的通信: Gdb和调试stub通过GDB串行协议进行通信。

16 6.4 C语言程序的结构 C语言目标文件中的段 执行程序内部细节 目标文件各段的链接 C语言程序的执行

17 C语言目标文件中的段 C语言的目标文件一般包含三个主体段: 代码段(Code,又称Text) 只读数据段(RO Data)
读写数据段(RW Data)

18 执行程序内部细节 1 #include <stdio.h> 2 #include <stdlib.h> 3
4 const char ro_data[1024]={"This is readonly data"}; 5 char rw_data_1[1024]={"This is global readwrite data"}; 6 static char rw_data_2[1024]={"This is internal readwrite data"}; 7 static char zero_data_1[1024]; 8

19 执行程序内部细节 9 int main(int argc, char *argv[]) 10 {
10 { static char zero_data_2 [1024]; int i; char stack_data_1[100]; char stack_data_2[] = {"Init stack Data"}; char* memptr; memptr = (char *)malloc(1024); if(NULL == memptr) { printf("malloc error\n"); return -1; } else { printf("malloc successfully\n"); } for(i=0;i<1024;i++) { zero_data_1[i] = 'a'; }

20 执行程序内部细节 30 strcpy(stack_data_1,"stack data 1");
strcpy(memptr,"data in heap"); 32 printf("ro_data:%s\n",ro_data); printf("rw_data_1:%s\n",rw_data_1); printf("rw_data_2:%s\n",rw_data_2); printf("stack_data_1:%s\n",stack_data_1); printf("stack_data_2:%s\n",stack_data_2); printf("memptr:%s\n",memptr); 39 free(memptr); return 0; 42 }

21 目标文件各段的链接 可执行文件其主体部分依然是代码段(Code)、只读数据段(RO Data)、读写数据段(RW Data)三个段,这三个段由各个目标文件(.o)经过“组合”而成。

22 C语言程序的执行 运行方式1,全部加载到内存中。

23 C语言程序的执行 运行方式2,本地运行PIC,一般在Nor Flash中。

24 6.4 仿真环境 源代码编译成主机程序 主机运行目标机代码

25 源代码编译成主机程序

26 主机运行目标机代码

27 课程结束


Download ppt "第6章 嵌入式软件开发基础."

Similar presentations


Ads by Google