嵌入式软件开发基础

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

15 char* memptr;
16 memptr = (char *)malloc(1024);
17 if(NULL == memptr)
18 {
19
printf("malloc error\n");
20
return -1;
21 }
Байду номын сангаас
22 else
23 {
24
printf("malloc successfully\n");
在远程GDB调试中,调试器是运行在主机 (host,桌面电脑)的应用程序, 被调试的程序 是运行在目标(target)上。它通过插桩(stub)的 方式实现,即在目标操作系统和调试器内分别加 入某些功能模块,二者互通信息来进行调试。调 试器与被调程序的通信: Gdb和调试stub通过 GDB串行协议进行通信。
嵌入式应用的生成特点
C代码 编译器 汇编代码 汇编器 机器代码 链接器 可执行程序
ADS:armcc.exe\tcc.exe Linux: arm-liunx-gcc
ADS:armasm.exe Linux: arm-linux-as
ADS:armlink.exe Linux: arm-linux-ld ADS:armsd.exe 或axd.exe Linux: gdb \ gdb server
6.2 嵌入式软件开发流程
嵌入式应用的生成特点 编译 汇编 链接 加载程序
嵌入式应用的生成特点
C语言程序的生成分成编译、汇编、 链接等几个步骤。最终的目标文件的主要 部分是处理器可执行的机器代码组合。
根据系统的不同,目标文件除了可执 行的二进制代码部分外,可能还包括一定 的头。
嵌入式应用的生成特点
JTAG调试
JTAG是Joint Test Action Group的简称。 JTAG使用边界扫描(Boundary-Scan)的 方式调试:在正常的运行状态下,这些边 界扫描寄存器对于芯片是透明的;在调试 的运行状态下,通过这些边界扫描寄存器 单元,可以实现对芯片输入输出信号的观 察和控制。
远程GDB调试
集成开发环境:
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
调试器
编译(Compile)
编译(Compile)是指从高级语言转换成 汇编语言的过程。从本质上编译是一个文本 转换的过程(从文本文件到文本文件)。编 译包含了C语言的语法解析和生成汇编语言 两个步骤。

汇编 (Assemble)
汇编(Assemble)是指从汇编语言 程序生成目标系统的二进制代码(机器 代码)的过程。相对于编译过程的语法 解析,汇编的过程相对简单。这是因为 对于一款特定的处理器,其汇编语言和 二进制的机器代码是一一对应的。
链接(Link)
链接(Link)过程将汇编成的多个 机器代码组合成一个可执行程序。一般 来说,通过编译和汇编过程,每一个源 文件将生成一个目标文件。链接器的作 用就是将这些目标文件组合,组合的过 程包括了代码段、数据段等部分的合并, 以及添加相应的文件头。
6.3 调试工具和方法
嵌入式调试的特点 打印调试信息 JTAG调试 远程gdb调试
第6章 嵌入式软件开发基础
第6章 嵌入式软件开发基础
6.1 嵌入式软件开发语言 6.2 嵌入式软件开发流程 6.3 调试工具和方法 6.4 C语言程序的结构 6.3 仿真环境
6.1 嵌入式软件开发语言
汇编(与体系结构相关) C语言(最常用语言) C++语言(面向对象,C语言的扩展) JAVA(面向对象,可移植性强) 脚本语言(不需要编译)
嵌入式调试的特点
在嵌入式系统中,调试的概念相对复杂。对 于其调试过程,程序主体运行在目标机上,主机 所起的作用是获得程序运行中的信息,并通过人 工或者程序的方式分析这些信息。因此嵌入式调 试的基础是需要一条从主机到目标机的通讯通道。
主机
程序运行信息 控制命令
通信通道
目标机
打印调试信息
打印调试信息是基本的调试方式, printf()标准输出,在嵌入式系统中, 这种输出的通讯通道可能是串口或者 网络协议。在某些系统中,没有实现 标准输出,这就需要开发者自己开发 调试手段。
6.4 C语言程序的结构
C语言目标文件中的段 执行程序内部细节 目标文件各段的链接 C语言程序的执行
C语言目标文件中的段
C语言的目标文件一般包含三个主体段: 代码段(Code,又称Text) 只读数据段(RO Data) 读写数据段(RW Data)
只读区 读写区
Code (代码段)
25 }
26 for(i=0;i<1024;i++)
执行程序内部细节
9 int main(int argc, char *argv[])
10 {
11 static char zero_data_2 [1024];
12 int i;
13 char stack_data_1[100];
14 char stack_data_2[] = {"Init stack Data"};
RO data (只读数据段)
RW data (读写数据段)
代码段 数据段
执行程序内部细节
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
相关文档
最新文档