STM32裸板程序的编译

声明:由于本人知识有限,错误之处,欢迎指正。

STM32 的开发环境是keil uvision5(也称MDK5)。这个软件集成了很多功能,但它不适合学习。 因为它屏蔽了很多内部细节。比如编译,链接的细节。

接下来介绍不使用MDK5来编译裸板程序。

在linux下,编译的基本步骤如下:

1)    arm-linux-gcc  -c  -nostdlib  source -o dest

2)    arm-linux-ld  -nostdlib -nostartfiles -T text=0x48000000  -e entry  sources -o dest

3)    arm-linux-objcopy -o binary source dest 

第一步:编译成目标文件,参数 nostdlib 是不使用标准库文件。因为裸板成没有库可供使用。

第二步:链接多个目标文件,

    参数nostdlib 是不使用标准库文件,

    参数nostartfiles是不在程序的头部添加标准启动代码。(标准启动是供操作系统调用的一段代码,_start),

    参数-T options 中text=0写8000000 定义代码段的开始位置(此地址是物理地址,因为裸板程序一般不开启MMU,在操作系统中MMU会把cpu发过来的虚拟地址转换为真实的物理地址)。

    参数-e entry 是定义程序的入口地址。这里一般使用函数名,(函数名代表了函数的入口地址)。

第三步:objcopy - copy and translate object files。拷贝转换二进制文件。

     参数-O  binary 是只拷贝链接文件中的二进制代码。链接后的文件中有一部分是关于该程序的描述,不属于可执行代码,在操作系统中会检查该部分内容然后去除,在裸板程序中没有其他操作剔除这部分内容,会执行出错。关于程序的描述内容可使用file a.out 查看。

最后得到的文件才是可以在裸板上执行的裸板程序。

MDK5 将这些操作细节都屏蔽了。在学习过程中,我们需要知道裸板程序是怎么来的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值