编译器原理简介(以Cortex-M3为例)

在"keil根目录\ARM\ARMCC\bin"下可以找到如下文件:

他们就是编译器内核,将工程代码转换成二进制文件,烧写进MCU中执行。

目录

C与汇编

典型的开发流程

编译工具报错举例


C与汇编

在CM3上编程,开发人员既可以使用C也可以使用汇编。可能还有其它语言的编译器,但是大多数人还是会在C与汇编的世界里游弋。C与汇编都“尺有所短,寸有所长”,不能互相取代。使用C能开发大型程序,而汇编则用于执行特种任务。

只有在不多的特殊场合是适合使用汇编,甚至是非使用汇编语言不可的,如:

  • 无法用C写成的函数,如操作特殊功能寄存器,以及实施互斥访问;
  • 在危急关头执行处理的子程(如,NMI服务例程);
  • 存储器极度受限,只有使用汇编才可能把程序或数据挤进去;
  • 执行频率非常高的子程,如操作系统的调度程序;
  • 与处理器体系结构相关的子程,如上下文切换;
  • 对性能要求极高的应用,如防空炮的火控系统。

用C写的程序可以移植,并且操作复杂数据结构时远远比汇编方便。

在很多情况下,都需要让C程序模块与汇编程序模块互相交互,它们包括:

  • 在C代码中使用了嵌入式汇编(或者是在GNU工具下,使用了内联汇编);
  • C程序呼叫了汇编程序,这些汇编程序是在独立的汇编源文件中实现的;
  • 汇编程序调用了C程序。

 典型的开发流程

在开发基于CM3的应用程序时,编译工具需要考虑到最基本的开发语言,也就时C与汇编,使用ARM工具链时的典型开发流程如下:

对照文章最开始的编译器文件来看,armar.exe是预处理器、armcc.exe是编译器、armasm.exe是汇编器、armlink.exe是链接器、fromelf.exe是elf文件的实用工具集。

编译工具报错举例

1.汇编器报错举例

在startup_stm32f10x_hd_vl.s中,修改原来的汇编语言,制造一个汇编源文件的错误:

再对工程进行编译,出现如下报错:

以assembling…开头的错误提示即为汇编器报错。

2.编译器报错举例

在main.c中,屏蔽一个头文件,制造一个C源文件的错误:

再对工程进行编译,出现如下报错:

以compiling…开头的错误提示即为编译器报错。

3.链接器报错举例

在main.c中,调用一个不存在的函数,制造一个链接错误:

再对工程进行编译,出现如下报错:

以linking…开头的错误提示即为链接器报错。

拓展内容

《Cortex-M启动代码分析》

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值