0
点赞
收藏
分享

微信扫一扫

浅谈Keil-MDK创建项目&编译过程---Code-data,RO-data,RW-data,ZI-data


浅谈Keil-MDK创建项目&编译过程---Code-data,RO-data,RW-data,ZI-data

  • ​​一、编译过程​​
  • ​​二、MDK 编译工具​​
  • ​​(1)创建一个新的工程​​
  • ​​(2)添加 startup(启动文件,由汇编编写)​​
  • ​​(3) 初识工程常见一串错误分析​​
  • ​​(4) 看看编译过程输出显示的信息​​
  • ​​三、Code-data,RO-data,RW-data,ZI-data 介绍​​
  • ​​四、最后附带一张图,了解哈工程文件的简单含义​​

​​谈谈Keil-MDK编译输出的:Code-data,RO-data,RW-data,ZI-data​​Code-data,RO-data,RW-data,ZI-data 程序运行时加载过程

一、编译过程

浅谈Keil-MDK创建项目&编译过程---Code-data,RO-data,RW-data,ZI-data_RW-data

  (1) 编译,MDK 软件使用的编译器是 armcc 和 armasm,它们根据每个 c/c++和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息
  (2) 链接,链接器 armlink 把各个.o 文件及库文件链接成一个映像文件“.axf”或“.elf”
  (3) 格式转换,一般来说 Windows 或 Linux 系统使用链接器直接生成可执行映像文件 elf后,内核根据该文件的信息加载后,就可以运行程序了,但在单片机平台上,需要把该文件的内容加载到芯片上,所以还需要对链接器生成的 elf 映像文件利用格式转换器fromelf 转换成“.bin”或“.hex”文件,交给下载器下载到芯片的 FLASH 或 ROM 中

二、MDK 编译工具

(1)创建一个新的工程

(2)添加 startup(启动文件,由汇编编写)

 启动文件顾名知义,也就是当STM32上电启动后第一个执行的汇编程序
  启动文件主要功能:
    · 初始化堆栈指针 SP =_initial_sp
    · 初始化程序计数器指正 PC = Reset_Handler
    · 设置堆、栈的大小
    · 初始化中断向量表
    · 配置外部 SRAM 作为数据存储器(此项有用户根据自己用的开发板的实际情况做配置)
    · 调用 SystemIni() 函数配置 STM32 的系统时钟
    · 调用 C 库函数_main 初始化用户堆栈,从而最终调用 main 函数去到 C 的世界
   ​​​启动文件的具体代码不作详细分析感兴趣可以去查阅相关的资料,还是比较全的​

 由于官方提供的启动文件分了不同 型号,如果你不知道你用的芯片改选择哪一种型号的启动文件,不要慌张,Keil-MDK IDE 提供有这个功能,在你选择完STM32 型号后(当然在这之前你的导入芯片的 package, 比如你可以这样操作:​​点击去这里瞧瞧​​),点击OK,会弹出一个框按下图操作即可,得到启动文件

(3) 初识工程常见一串错误分析

既然前面工程已经搭建完美,首先我们来编译一下

(4) 看看编译过程输出显示的信息

三、Code-data,RO-data,RW-data,ZI-data 介绍

  查看数输出信息发现了这么一串​​Program Size: Code=320 RO-data=252 RW-data=0 ZI-data=1632​​他们分别是什么了?接下来进行讲解演示:


​​点击到这里来详细解释​​


四、最后附带一张图,了解哈工程文件的简单含义




浅谈Keil-MDK创建项目&编译过程---Code-data,RO-data,RW-data,ZI-data_Code_22

浅谈Keil-MDK创建项目&编译过程---Code-data,RO-data,RW-data,ZI-data_keil mdk_23


举报

相关推荐

0 条评论