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

Slides:



Advertisements
Similar presentations
面向对象与设计模式 RD 常见编程范式介绍  并行编程 - Process-orientedProcess-oriented  组件编程 - Component-basedComponent-based  事件驱动 - Service-oriented,Time-drivenService-orientedTime-driven.
Advertisements

C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
烘焙丙級麵包產品 數位學習 紅豆餡甜麵包 高雄應用科技大學 觀光管理系觀光與餐旅管理碩士班 林庭榛.
大连理工大学软件学院 嵌入式系统工程系 赖晓晨
第1单元 操作系统概论 第一节 绪论 操作系统定义.
目 錄.
“八皇后”问题 崔萌萌 吕金华.
行程(process).
四資二甲 第三週作業 物件導向程式設計.
第五课 让挫折丰富我们的人生 挫折面前也从容.
香港普通話研習社科技創意小學 周順強老師.
操作系统原理 Principles of Operating System
你喝的水健康嗎? 探討飲用水的功效 製作人:孫定達.
基于操作系统的编程复习 张玉宏
Linux Further.
第8章 字元與字串處理 8-1 C語言的字元檢查函數 8-2 C語言的字串 8-3 字串的輸入與輸出 8-4 指標與字串
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
高级语言程序设计 主讲人:陈玉华.
Compilers Flex & Bison 的安裝使用
選擇排序法 通訊一甲 B 楊穎穆.
C的發展史 C程式初體驗 C程式設計基本注意事項 上機實習課程
chapter 1-Introduction
中国科学技术大学计算机系 陈香兰(0512- ) Spring 2011
C 程式設計— 指標.
If … else 選擇結構 P27.
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
第7章 Linux环境编程.
助教:胡光能,解定宝 编译原理讲师:戴新宇
程序讲解 第一题: 将指定文件的m行到n行字符写到显示屏上,m和n值从键盘输入。 运行时输入及结果: please enter m,n:
第14章 Bootloader基本概念與燒錄.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
Function.
程序设计期末复习 黎金宁
程式撰寫流程.
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
第五章 C/C++及汇编语言的混合编程 5.1 ARM C/C++编译器 5.2 在C/C++程序中内嵌汇编指令
計數式重複敘述 for 迴圈 P
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
序及第0章.
第4讲 C++程序控制结构(二) 4.1 循环结构 4.2 转向控制 4.3 综合案例分析.
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
辅导课程八.
C语言大学实用教程 第5章 函数与程序结构 西南财经大学经济信息工程学院 刘家芬
ARM Developer Suite 介 绍.
C语言程序示例: 1.输入10个数,按从小到大的顺序排序。 2.汉诺塔问题。.
C程序设计.
函式庫補充資料.
Oop8 function函式.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
<编程达人入门课程> 本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 字符与字符串 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
本节内容 文件读写 视频提供:昆山爱达人信息技术有限公司.
第7章 程序的结构 四、生存期与存储属性 五、extern关键字与外部连接属性 六、static关键字与内部连接属性.
第二章 类型、对象、运算符和表达式.
累堆排序法 (Heap Sort).
本节内容 引用类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C程序设计.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
挑戰C++程式語言 ──第9章 函數.
本节内容 指针类型.
第二章ADS1.2开发环境创建与简介.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
作業一: 安裝Linux於btrfs上 中正大學 作業系統實驗室 指導教授:羅習五
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Introduction to the C Programming Language
隨機函數.
Presentation transcript:

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

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

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

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

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

嵌入式应用的生成特点 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调试

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

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

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

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

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

C语言目标文件中的段 C语言的目标文件一般包含三个主体段: 代码段(Code,又称Text) 只读数据段(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

执行程序内部细节 9 int main(int argc, char *argv[]) 10 { 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 else 23 { 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语言程序的执行 运行方式1,全部加载到内存中。

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

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

源代码编译成主机程序

主机运行目标机代码

课程结束