好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

28页
  • 卖家[上传人]:hs****ma
  • 文档编号:591305788
  • 上传时间:2024-09-17
  • 文档格式:PPT
  • 文档大小:736KB
  • / 28 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第6章 嵌入式软件开发基础 第6章 嵌入式软件开发基础 l6.1 嵌入式软件开发语言l6.2 嵌入式软件开发流程l6.3 调试工具和方法l6.4 C语言程序的结构l6.5 仿真环境 6.1 嵌入式软件开发语言p汇编(与体系结构相关)pC语言(最常用语言)语言(最常用语言)pC++语言(面向对象,C语言的扩展)pJAVA(面向对象,可移植性强)p脚本语言(不需要编译) 6.2 嵌入式软件开发流程p嵌入式应用程序的生成特点p编译p汇编p链接p加载程序 嵌入式应用程序的生成特点 C语言程序的生成分成编编译译、、汇汇编编、、链链接接等几个步骤最终的目标的文件的主要部分是处理器可执行的机器代码组合根据系统的不同,目标文件可能除了可执行的二进制代码部分外,还包括一定的头(ELF、Flat) 嵌入式应用的生成特点ADS(Arm Developer Suite),主要需要使用以下工具:l编译器:armcc.exe(编译成ARM指令汇编)和tcc.exe(编译成Thumb指令汇编)l汇编器:armasm.exel链接器:armlink.exeARM-Linux GCC交叉编译系统,则主要使用以下工具:l编译器:arm-lixux-gcc(可以统一编译-汇编过程)l汇编器:arm-linux-asl链接器:arm-linux-ld 嵌入式应用的生成特点 编译(Compile) 编译(Compile)是指从高级语言转换成汇编语言的过程。

      从本质上编译是一个文本转换的过程(从文本文件到文本文件)编译包含了C语言的语法解析和生成汇编语言两个步骤 汇编 (Assemble) 汇编(Assemble)是指从汇编语言程序生成目标系统的二进制代码(机器代码)的过程相对于编译过程的语法解析,汇编的过程相对简单这是因为对于一款特定的处理器,其汇编语言和二进制的机器代码是一一对应的 链接(Link) 链接(Link)过程将汇编成的多个机器代码组合成一个可执行程序一般来说,通过编译和汇编过程,每一个源文件将生成一个目标文件链接器的作用就是将这些目标文件组合,组合的过程包括了代码段、数据段等部分的合并,以及添加相应的文件头 链接程序加载 开发期: 运行期 6.3 调试工具和方法p嵌入式调试的特点p打印调试信息pJTAG调试p远程gdb调试 嵌入式调试的特点 在嵌入式系统中,调试的概念相对复杂对于其调试过程,程序主体运行在目标机上,主机所起的作用是获得程序运行中的信息,并通过人工或者程序的方式分析这些信息因此嵌入式调试的基础是需要一条从主机到目标机的通讯通道。

      打印调试信息 打印调试信息是基本的调试方式, printf()标准输出,在嵌入式系统中,这种输出的通讯通道可能是串口或者网络协议在某些系统中,没有实现标准输出,这就需要开发者自己开发调试手段 JTAG调试 JTAG是Joint Test Action Group的简称JTAG使用边界扫描(Boundary-Scan)的方式调试:在正常的运行状态下,这些边界扫描寄存器对于芯片是透明的;在调试的运行状态下,通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制 远程GDB调试 在远程GDB调试中,调试器是运行在主机(host,桌面电脑)的应用程序, 被调试的程序是运行在目标(target)上它通过插桩(stub)的方式实现,即在目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试调试器与被调程序的通信: Gdb和调试stub通过GDB串行协议进行通信 6.4 C语言程序的结构pC语言目标文件中的段p执行程序内部细节p目标文件各段的链接pC语言程序的执行 C语言目标文件中的段 C语言的目标文件一般包含三个主体段:l代码段(Code,又称Text)l只读数据段(RO Data)(常量)l读写数据段(RW Data)(已初始化静态变量) 执行程序内部细节1#include 2#include 34const char ro_data[1024]={"This is readonly data"};5char rw_data_1[1024]={"This is global readwrite data"};6static char rw_data_2[1024]={"This is internal readwrite data"};7static char zero_data_1[1024];8 执行程序内部细节9int 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"};15 char* memptr;16 memptr = (char *)malloc(1024);17 if(NULL == memptr)18 {19 printf("malloc error\n"); 20 return -1;21 }22 else23 {24 printf("malloc successfully\n"); 25 }26 for(i=0;i<1024;i++)27 {28 zero_data_1[i] = 'a'; 29 } 执行程序内部细节30 strcpy(stack_data_1,"stack data 1");31 strcpy(memptr,"data in heap");32 33 printf("ro_data:%s\n",ro_data);34 printf("rw_data_1:%s\n",rw_data_1); 35 printf("rw_data_2:%s\n",rw_data_2);36 printf("stack_data_1:%s\n",stack_data_1);37 printf("stack_data_2:%s\n",stack_data_2); 38 printf("memptr:%s\n",memptr); 39 40 free(memptr);41 return 0;42 } 目标文件各段的链接 可执行文件其主体部分依然是代码段(Code)、只读数据段(RO Data)、读写数据段(RW Data)三个段,这三个段由各个目标文件(.o)经过“组合”而成。

      C语言程序的执行 C语言程序的执行 6.4 仿真环境p源代码编译成主机程序 p主机运行目标机代码 源代码编译成主机程序 主机运行目标机代码 课程结束 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.