【嵌入式实验】《嵌入式开发工具使用》

笔记目录点这里:南邮(通达)计算机专业基础

一.实验目的

了解嵌入式开发工具套件组成,掌握开发工具安装,熟练运用 gcc 各命令选项,熟练编写 Makefile 和使用 make 工具,掌握 gdb 各命令用于应用程序调试。

二.实验内容

实验2.1 arm-linux-gcc 安装
实验2.2 编译工具 gcc 使用
实验2.3 编写 Makefile 和使用 make 编译
实验2.4 使用 gdb 调试应用程序
实验2.5 使用 code::blocks 进行图形化编程

三.预备知识

Linux 使用等。

四.实验设备及工具(包括软件调试工具)

硬件:ARM 嵌入式开发平台、PC 机 Pentium100 以上、串口线。
软件: WinXP 或 UBUNTU 开发环境。

五.实验步骤

5.1 交叉编译工具配置及编译

步骤【参看04- Tiny6410 Linux开发指南.pdf文档1.3.5节】:

也可以参考这篇笔记:Linux开发工具arm-linux-gcc安装及使用

第一步,解压缩交叉编译器工具命令为:tar xvzf arm-linux-gcc-4.6.4-v6-vfp-20101103.tgz -C/
arm-linux-gcc 可执行文件位于目录 /opt/FriendlyARM/toolchain/4.6.4/bin

第二步,修改PATH环境变量,将 arm-linux-gcc 可执行文件目录添加到PATH环境变量中,命令为Export PATH=/root/opt/FriendlyARM/toolschain/4.6.4/bin:$PATH

第三步,执行 arm-linux-gcc –v 可以看到交叉编译器版本为 gcc version 4.6.4
在这里插入图片描述

5.2 arm-linux-gcc编译工具使用

【参看相关视频文件及指导书】:
要求:要求编写冒泡排序程序 bubble.c 及其头文件 bubble.h 和主程序 main.c,各文件主要内容如下:
main.c 中定义数组并赋值(数组元素个数和赋值内容可以自己定义),调用 bubble.c 中冒泡排序函数bubble(int *p,int n) 进行排序,调用输出打印函数 print(int *p,int n) 进行输出。
bubble.c定义 bubble(int *p,int n) 和 print(int* p ,int n) 函数,分别完成冒泡排序功能和数组输出功能。
bubble.h完成bubble.c中函数的声明。
第一步,在 /opt/exp_2 文件夹下按照上述要求编写源码;
第二步 编译
(1)编译源码文件为可执行文件bubble,命令为:gcc -o bubble main.c bubble.c
(2)假设在 /opt/exp_2 文件夹下新建子目录 include,并将 bubble.h 移到该文件夹下,编译可执行文件 bubble,命令为:gcc -o bubble main.c bubble.c -I./include
(3)假如将 bubble.c 编译成动态库 libbubble.so,具体命令为:arm-linux-gcc –shared -fpic -o libbubble.so bubble.c –I./include,此时利用 libbubble.so 编译可执行文件 bubble,具体命令为:gcc -o bubble main.c -lbubble -L./ -l./include

思考:如果将bubble拷贝到开发板上,执行是否成功?怎样才能成功?
gcc 编译会失败;用 arm-linux-gcc 编译可以成功。

(4)可执行程序 bubble 生成过程中,分别使用 -O1/-O2/-O3 进行编译,生成的可执行文件名分别为bublle1 、bubble2 和 bubble3,观察这几个文件的大小分别为 878487848784 字节。如果用-g命令选项生成可执行文件 bubble4,则字节大小为10392字节。

思考:为何这几个可执行文件大小有差异
实验代码本身很简单,-o1、-o2、-o3优化作用不大; -g编译器在编译的时候会产生调试信息
在这里插入图片描述

5.3 编写Makefile和使用make工具

按照5.2要求,编写Makefile文件,要求能够完成源码文件编译和中间文件清除。
(1)Makefile如下

SRCS:=$(wildcard  *.c)
OBJS:=$(patsubst  %.c,%.o,$(SRCS))
CC=gcc
bubble:$(OBJS)
$(CC)  –o  $@  $(OBJS)
%.o:%.c
$(CC)  -g  -c  -o  $@$<  -l./include
clean:
rm  $(OBJS)  bubble

(2)使用make工具编译生成可执行文件命令为 make;
(3)清除中间结果命令为 make clean

5.4 使用 gdb 调试应用程序

假设按照我们提供的实验源码bubble.c和main.c生成可执行文件,执行结果为:
the sorted Array is 32766 1 2 3 5 10 32766
在这里插入图片描述
发现执行结果并不符合我们的预期,使用gdb进行调试,列出具体步骤如下:

gdb bubble;
list bubble
list
b main
Run
List
next
print a[0]
next
Print a[0]	
Print a[1]
Print a[3]
Print a[4]
Next
Quit
b print
b main
Run
Next
Step
Next
Next
quit

5.5 使用code::blocks进行图形化编程

修改一下老师代码中的输出函数,让结果输出正确。
在这里插入图片描述

发布了199 篇原创文章 · 获赞 77 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43734095/article/details/105701758
今日推荐