一、了解MDK 的编译过程
(1) 编译,MDK 软件使用的编译器是armcc 和armasm,它们根据每个c/c++和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息;
(2) 链接,链接器armlink 把各个.o 文件及库文件链接成一个映像文件“.axf”或“.elf”;
(3) 格式转换,一般来说Windows 或Linux 系统使用链接器直接生成可执行映像文件elf后,内核根据该文件的信息加载后,就可以运行程序了,但在单片机平台上,需要把该文件的内容加载到芯片上,所以还需要对链接器生成的elf 映像文件利用格式转换器fromelf 转换成“.bin”或“.hex”文件,交给下载器下载到芯片的FLASH 或ROM 中。
二、简述axf bin hex s19文件的区别与联系
bin文件是最直接的代码映像,它记录的内容就是要存储到 FLASH 的二进制数据(机器码本质上就是二进制数据),在 FLASH 中是什么形式它就是什么形式,没有任何辅助信息,包括大小端格式也没有,因此下载器需要有针对芯片 FLASH 平台的辅助文件才能正常下载(一般下载器程序会有匹配的这些信息);
hex文件是一种使用十六进制符号表示的代码记录,记录了代码应该存储到FLASH 的哪个地址,下载器可以根据这些信息辅助下载;
S19文件和hex文件类似,也是在bin文件的基础上增加以下辅助信息;
axf 文件不仅包含代码数据,还包含了工程的各种信息,因此它也是四个文件中最大的;