嵌入式软件开发基础PPT格式课件下载.ppt
《嵌入式软件开发基础PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《嵌入式软件开发基础PPT格式课件下载.ppt(27页珍藏版)》请在冰豆网上搜索。
armcc.exe(编译成ARM指令汇编)和tcc.exe(编译成Thumb指令汇编)汇编器:
armasm.exe链接器:
armlink.exeARM-LinuxGCC交叉编译系统,则主要使用以下工具:
arm-lixux-gcc(可以统一编译-汇编过程)汇编器:
arm-linux-as链接器:
arm-linux-ld,嵌入式应用的生成特点,编译(Compile),编译(Compile)是指从高级语言转换成汇编语言的过程。
从本质上编译是一个文本转换的过程(从文本文件到文本文件)。
编译包含了C语言的语法解析和生成汇编语言两个步骤。
汇编(Assemble),汇编(Assemble)是指从汇编语言程序生成目标系统的二进制代码(机器代码)的过程。
相对于编译过程的语法解析,汇编的过程相对简单。
这是因为对于一款特定的处理器,其汇编语言和二进制的机器代码是一一对应的。
链接(Link),链接(Link)过程将汇编成的多个机器代码组合成一个可执行程序。
一般来说,通过编译和汇编过程,每一个源文件将生成一个目标文件。
链接器的作用就是将这些目标文件组合,组合的过程包括了代码段、数据段等部分的合并,以及添加相应的文件头。
6.3调试工具和方法,嵌入式调试的特点打印调试信息JTAG调试远程gdb调试,嵌入式调试的特点,在嵌入式系统中,调试的概念相对复杂。
对于其调试过程,程序主体运行在目标机上,主机所起的作用是获得程序运行中的信息,并通过人工或者程序的方式分析这些信息。
因此嵌入式调试的基础是需要一条从主机到目标机的通讯通道。
打印调试信息,打印调试信息是基本的调试方式,printf()标准输出,在嵌入式系统中,这种输出的通讯通道可能是串口或者网络协议。
在某些系统中,没有实现标准输出,这就需要开发者自己开发调试手段。
JTAG调试,JTAG是JointTestActionGroup的简称。
JTAG使用边界扫描(Boundary-Scan)的方式调试:
在正常的运行状态下,这些边界扫描寄存器对于芯片是透明的;
在调试的运行状态下,通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。
远程GDB调试,在远程GDB调试中,调试器是运行在主机(host,桌面电脑)的应用程序,被调试的程序是运行在目标(target)上。
它通过插桩(stub)的方式实现,即在目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试。
调试器与被调程序的通信:
Gdb和调试stub通过GDB串行协议进行通信。
6.4C语言程序的结构,C语言目标文件中的段执行程序内部细节目标文件各段的链接C语言程序的执行,C语言目标文件中的段,C语言的目标文件一般包含三个主体段:
代码段(Code,又称Text)只读数据段(ROData)读写数据段(RWData),执行程序内部细节,1#include2#include34constcharro_data1024=Thisisreadonlydata;
5charrw_data_11024=Thisisglobalreadwritedata;
6staticcharrw_data_21024=Thisisinternalreadwritedata;
7staticcharzero_data_11024;
8,执行程序内部细节,9intmain(intargc,char*argv)1011staticcharzero_data_21024;
12inti;
13charstack_data_1100;
14charstack_data_2=InitstackData;
15char*memptr;
16memptr=(char*)malloc(1024);
17if(NULL=memptr)1819printf(mallocerrorn);
20return-1;
2122else2324printf(mallocsuccessfullyn);
2526for(i=0;
i1024;
i+)2728zero_data_1i=a;
29,执行程序内部细节,30strcpy(stack_data_1,stackdata1);
31strcpy(memptr,datainheap);
3233printf(ro_data:
%sn,ro_data);
34printf(rw_data_1:
%sn,rw_data_1);
35printf(rw_data_2:
%sn,rw_data_2);
36printf(stack_data_1:
%sn,stack_data_1);
37printf(stack_data_2:
%sn,stack_data_2);
38printf(memptr:
%sn,memptr);
3940free(memptr);
41return0;
42,目标文件各段的链接,可执行文件其主体部分依然是代码段(Code)、只读数据段(ROData)、读写数据段(RWData)三个段,这三个段由各个目标文件(.o)经过“组合”而成。
C语言程序的执行,C语言程序的执行,6.4仿真环境,源代码编译成主机程序主机运行目标机代码,源代码编译成主机程序,主机运行目标机代码,课程结束,