在"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…开头的错误提示即为链接器报错。