嵌入式系统3-15(gcc)

while(1)
{
wait(30000);
GPFDAT=(~(i<<4)); //根据i值轮流点亮124灯
if(++i=8) i=0;
}
//以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化

GCC编译常用选项和介绍(
1.预处理(将include插入,展开宏定义 -E。生成 .i 的文件)
2.编译(转换成汇编语言, 生成文件 .s)
3.汇编(.S生成elf(linux),-e。变为目标代码(机器代码)生成 .o 的文件)
4.链接(库文件.o连接。连接目标代码, 生成可执行程序)
hello.c预处理=>hello.i编译=>hello.S汇编=>hello.o=链接>hello.elf

gcc -E -o hello.i hello.c
gcc -S -o hello.S hello.i
gcc -c -o hello.o hello.S 汇编
gcc -o hello hello.o

-E只激活预处理,这个不生成文件, 你需要把它重定向到一个输出文件里面。
-S 只激活预处理和编译,就是指把文件编译成为汇编代码。
-c只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
-o制定目标名称, 默认的时候, gcc 编译出来的文件是 a.out, 很难听, 如果你和我有同感,改掉它, 哈哈。

gcc -Wall 显示警告信息
-O -O1 -O2 -O3 -O0(不优化)
编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高。

-ld: arm-linux-ld连接成可执行文件
-T 代码段、数据段、bss段起始地址。BL不能指定,无底层软件支持。
arm-ld-Ttext 0x00000000 -g led.o -O led_elf
代码段从0地址,生成elf
Tdata指定数据段
Tbss

1.B跳转
2.直接给pc赋值

作业:看反汇编文件,哪里跳转了
哪一个与位置有关,哪一个无关
在这里插入图片描述
gcc -c -o link.o link.s
ld -Text 0x00000000 link.o -o link_elf_0x0
ld -Text 0x30000000 link.o -o link_elf_0x3
objdump -D link_elf_0x0>link_elf_0x0.dis生成反汇编文件
objdump -D link_elf_0x3>link_elf_0x3.dis生成反汇编文件

在这里插入图片描述.lds输出文件映射图
02 启动地址
03 重定位地址 .text段名
04 对齐地址(四字对齐 0x4 0x8 0xc)

结合3.3的笔记大概能理解怎么写了,感觉老师带着走了一遍就会,自学可能也要自己去打一遍。
objcopy编译内核,把elf格式转换为二进制文件,
objcopy -o binary -s elf_file bin_file

objdump 显示二进制文件信息,查看反汇编
objdumo -D -b binary -m -arm bin_file>dis_file

可以总结一篇文章,如何写这些代码汇编、C语言、makefile 启动程序的设计需要汇编

1.接口系列
GPIO/UART
以GPIO为例介绍裸板程序
汇编和C语言版本
启动程序的设计需要汇编+C语言
2.电路图的相关重要部件与CPU的连接方式,数据和地址
NOR NAND SDRAM DM9000
显示器
3.gcc
4.时钟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值