main之前初始化流程

2023-05-16

本文分别介绍Keil调用的ARMCC以及ARM-NONE-EABI-GCC两个编译器在main之前的操作:

Keil MDK启动文件

总结一下MDK的启动流程: 
1.系统初始化,包括中断向量表的重新映射 
2.加载RW段(.data段初始化) 
3.加载ZI段(.bss段初始化) 
4.初始化用户堆栈 
5.初始化Microlib 
6.调用main函数 
microlib 是缺省 C 库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行。 
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,例如,memcpy()。 
下图是Keil调用ARMCC的加载到运行的变化视图: 
这里写图片描述 
对于RO与RW段 
Loadregion_nameBase表示region_name区域的装载地址 
“Imageregion_nameBase”表示region_name区域的执行地址 
“Imageregion_nameLength”表示region_name区域的长度(单位:字节) 
对于ZI段 
“Imageregion_nameZIBase”表示region_name区域的执行地址 
“Imageregion_nameZILength”表示region_name区域的长度(单位:字节)

 ARM-NONE-EABI-GCC的crt0启动流程

利用arm-none-eabi-gcc编译器生成ELF文件,将ELF文件通过objdump反汇编可以找出main之前的初始化函数_mainCRTStartup。
下图为ARM7V-M平台下_mainCRTStartup的大致流程:

这里写图片描述

下面看一下ELF文件中各段的分布: 
这里写图片描述 
由上图可知.text后直接跟.data段,但.data段的地址为RAM的实际地址。

 小结:

arm-none-eabi-gcc不像armcc有将全局变量的值存储在flash中,所以没有像scatter_load函数这样从flash中加载全局变量到ram中,arm-none-eabi-gcc只能靠加载器将.data段直接加载到ram中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

main之前初始化流程 的相关文章

随机推荐

  • Cache和DMA一致性

    cache读必须要buffer是cacheline对齐的 DMA应该多多少少知道点吧 DMA Direct Memory Access 是指在外接可以不用CPU干预 xff0c 直接把数据传输到内存的技术 这个过程中可以把CPU解放出来 x
  • stm32几种低功耗模式的实现和差别

    origin https blog csdn net jian3214 article details 99818603 01 前言 按功耗由高到低排列 xff0c STM32具有运行 睡眠 停止和待机四种工作模式 上电复位后 STM32
  • threadx也开源了

    前一段时间ucos开源了 xff0c 今天微软收购的threadx也开源了 xff0c 行业剧变呀 xff01 xff01 xff01 2020 5 26
  • armv8-M 32bit处理器

    https www eet china com mp a14579 html https developer arm com ip products processors cortex m 最早的Cortex M0属于Armv6 M架构 x
  • 作为ARM Cortex-M家族的继承者 Cortex-M23与M33有哪五大特色?

    http news eeworld com cn xfdz article 2017011259937 html 集微网消息 xff0c ARM处理器在嵌入式设备领域的应用非常广泛 基于ARM Cortex处理器的片上系统 xff08 So
  • emmc5.1, ufs2.0, ufs3.0

    总的来说 xff0c UFS3 0的综合性能 xff0c 特别是持续读写速度有着秒杀UFS2 1前辈的表现 xff0c 只是在随机读写和SQLite性能上 xff0c 却依旧和双通道的UFS2 1持平 xff0c 有些小遗憾 最后 xff0
  • 串行Norflash是如何实现XIP的?

    先说问题 xff1a 要想程序在串行的Norflash中运行 xff0c 到底需要做哪些工作 xff1f Norflash和Nandflash想必大家都知道 恕本人才学疏浅 xff0c 最近突然发现Norflash可以并行连接实现XIP x
  • ARM汇编语言 - 简介 [一]

    origin https zhuanlan zhihu com p 82490125 ARM汇编语言 简介 一 兰新宇 talk is cheap 说明 xff1a 本系列文章将主要以ARMv7和ARMv8架构为例 xff0c 介绍ARM汇
  • ARM汇编语言 - 简介 [二]

    上文介绍了ARM的数据传送指令 xff0c 本文将主要介绍ARM中的移位 序转和位操作等数据处理指令 移位指令 移位包括逻辑移位和算术移位 xff0c 所谓 逻辑 就是将寄存器中存放的内容仅仅视为一串bits xff0c 移位的时候只需要将
  • 智能小车开发的重点之一电机该如何选型

    一 智能小车的分类 二 电机的分类 无刷电机要好于有刷电机 xff0c 优点 xff1a 1 没有损耗 xff0c 有刷电机有寿命 2 静音 xff0c 有刷电机噪音比较大 无刷电机分为带霍尔传感器和不带霍尔传感器两种 xff0c 因为无刷
  • ARM汇编语言 - 简介 [三]

    上文介绍了ARM的数据处理指令 xff0c 本文将主要介绍ARM中的跳转指令 跳转指令 无条件跳转 ARM中的基础跳转指令就一个字母 34 B 34 xff0c 代表Branch xff0c 相比起x86中和它功能基本相同的 34 jmp
  • CAN总线35周年特别篇 -- CAN总线的前世今生

    origin https mp weixin qq com s MloRz 4sio8QGdNItNRBjQ CAN总线35周年之际 xff0c 花了一晚上时间整理翻译了下 xff0c 通过这个帖子大家会对当前市场上各种CAN名词有的全面系
  • 微控制器CPU性能测试基准CoreMark

    origin https www cnblogs com henjay724 p 8729364 html 痞子衡嵌入式 xff1a 微控制器CPU性能测试基准 EEMBC CoreMark 大家好 xff0c 我是痞子衡 xff0c 是正
  • 意外发现,Cortex-M7的性能和诸多关键参数碾压A7和R7

    origin https www amobbs com thread 5676525 1 1 html 之前一直以为ARM A R M M排在最后也最便宜 xff0c 肯定性能最低 xff0c 但最近意外发现并非如此 xff0c M7居然完
  • gcc之-fomit-frame-point

    Kernel里的dump stack oops打印出来的backstrace调用链表是怎样实现的呢 xff1f 大家都知道当发生函数调用的时候 xff0c 函数的参数传递 xff0c 返回值传递都要遵循一定的规则 xff0c 在ARM体系架
  • Lauterbach trace32与 jlink

    一直不太明白trace32为何这么贵 xff0c 这篇文章讲了一些 xff0c 稍微明白一点了 一个小工具背后的故事 昨天我们推送了华为任正非2012年的讲话稿 真正的出路 xff1a 重读任正非2012实验室讲话 任总是在商场上真刀真枪干
  • 嵌入式开发输出调试信息的几种方法(常规法及非常规法)!

    origin https mp weixin qq com s 7LolqWUeJ4tCENh6yVmvXw 嵌入式开发的一个特点是很多时候没有操作系统 xff0c 或者没有文件系统 xff0c 常规的打印log到文件的方法基本不适用 最常
  • 从零开始,耗时两年,19岁小伙自制一块32位Risc-V处理器,可玩「贪吃蛇」

    从零开始 xff0c 耗时两年 xff0c 19岁小伙自制一块32位Risc V处理器 xff0c 可玩 贪吃蛇 脚本之家 今天 关注 脚本之家 xff0c 与百万开发者在一起 本文经机器之心 xff08 微信公众号 xff1a almos
  • 揭秘被Arm编译器所隐藏的浮点运算~

    以下文章来源于Mculover666 xff0c 作者mculover666 引言 笔者接触嵌入式领域软件开发以来 xff0c 几乎用的都是 ARM Cortex M 内核系列的微控制器 感谢C语言编译器的存在 xff0c 让我不用接触汇编
  • main之前初始化流程

    本文分别介绍Keil调用的ARMCC以及ARM NONE EABI GCC两个编译器在main之前的操作 xff1a Keil MDK启动文件 总结一下MDK的启动流程 xff1a 1 系统初始化 xff0c 包括中断向量表的重新映射 2