最近学习cortex-A8内核的soc,在Linux环境下开发,从汇编到C、uboot分析移植。过程中发现,使用A8的汇编和keil中的汇编同是arm内核的,却不太相同。然后大概的查了一下是因为编译器不同。
其实从stm32标准库中提供的文件我们就可以看出一这一问题的答案。
在ST提供的标准库中提供了针对不同编译器的启动代码,如下图
可以看出一共有针对4种编译工具的启动代码
第一个arm编译器,keil用的就是这个代码
第二个gcc编译器
第三个iar编译器,一看就是iar的
第四个trueSTUDIO,这是意法半导体公司针对STM32开发的一款全新的编译软件。
Gcc和truestudio的启动文件语法上基本相同。
所以不同的编译器会对汇编代码有影响,对C文件影响不大。如果要把keil的工程移植到IAR,则需要注意这方面的问题。
因此,如果要做一些涉及底层汇编的操作,不同的编译器对应不同的汇编语法,要选择的话感觉使用GCC汇编比较好,通用性会更好一些。