Linux中main和初启函数,ARM启动代码中_main 与用户主程序main()的区别
//wings:
汇总如下:
1、_main是编译系统提供的库函数,main()是用户自己编写的主函数;
2、_main主要做了三件事:
①将code/RW搬到ram中;
②初始化ZI数据;
③跳转到main()函数。
当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序,即呼叫主应用程序。最简单的一种情况是:
IMPORT main
B main
直接从启动代码跳转到应用程序的主函数入口,当然主函数名字可以由用户随便定义。
在
IMPORT __main
B __main
因此我们用的B __main其实是执行库函数,然后该库函数再调用我们的main() 函数,因此在单步调试时会看到先要跑一段程序(其实是库函数),然后再单步到我们自己的main函数(这个同时也说明如果有B __main 则就对应必须有main函数,否则编译出错),如果我们用 B main来进入我们的主函数的话,那在单步调试时就看到直接进入到我们自己的main函数了,中间不会看到其他程序;
那么用B __main和用B main 这两这进入我们的main函数方式有什么不同呢?
如果采用前者则会由
对含有启动程序来说,"执行地址与加载地址相同"不容易实现:
如果执行地址与加载地址相同哪当然不需要做"段拷贝",但是个人理解编译器还会加入"段拷贝"程序(如果用B __main 的话),只是因为条件不满足而不执行而已;但是对含有启动程序来说,"执行地址与加载地址相同"就不容易了.因为启动程序是要烧到非易失存储器里,用来在上电执行的,而这个程序必定会有RW段,如果RW放在非易失存储器,如FLASH,那就不好实现RW功能了,因此要给RW移动到能够实现RW功能的存储器,如SRAM等.因此,对含有启动程序来说,"执行地址与加载地址相同"就不容易实现;程序的入口点在C 库中的__main 处,在该点,库代码执行以下操作:
1. 将非零(只读和读写)运行区域从其载入地址复制到运行地址。
2. 清零ZI 区域。
3. 跳转到__rt_entry。
Linux中main和初启函数,ARM启动代码中_main 与用户主程序main()的区别相关推荐
- ARM启动代码中_main 与用户主程序main()的区别
STM32启动代码主要是分配堆栈及设置向量表,然后跳转到__main函数. 跳转具体到代码段部分如下: Reset_Handler PROC EXPORT Reset_Handler [WEAK] I ...
- Linux中main和初启函数,main 中的 argv和argc 到底是个啥意思?
原标题:main 中的 argv和argc 到底是个啥意思? 前言 一般我们平时写main函数的话,一般都是写不带参数的比较多,而且也习惯了这样写:其实标准的形式写法,main函数是带两个参数的,这两 ...
- 嵌入式ARM启动代码的工作
嵌入式ARM启动代码的工作 (1)定义代码的初始入口点:初始入口点是指代码运行时的起始点,它在每个映像文件中是唯一的,也是每个可执行的映像文件 所必须含有的,而且必须位于映像文 ...
- (八)cmockery中的calculator和run_tests函数的注释代码
所分析的calculator.c和calculator_test.c文件位于 工程中的 cmockery/src/example/ 目录下,是一个相对而言比较全面的样例程序,用到了cmocke ...
- python pow函数用法_Python代码中pow()函数具有哪些功能呢?
摘要: 下文讲述Python代码中pow()函数的功能说明,如下所示: pow函数功能说明 pow() 函数用于 计算 xy(x 的 y 次方) 的值 pow函数语法: import math mat ...
- python中format函数作用_Python代码中format函数具有哪些功能呢?
摘要: 下文讲述Python代码中format函数的功能说明,如下所示: format函数功能说明 format函数功能: 用于格式化字符串 format函数语法: format采用{} 和 : 来代 ...
- php中分页公式,php分页函数完整实例代码
本文分享一例php分页函数完整实例代码,使用此函数实现分页效果很不错.分享给大家供大家参考. 具体功能代码如下: /* * Created on 2011-07-28 * 使用方法: require_ ...
- Android 中的WiFi学习笔记(转载)----WIFI启动 代码流程走读---网络连接流程
Android的WiFi 我们通常看到WiFi的守护进程wpa_supplicant在我们的ps的进程列表中,这个就是我们的wifi守护进程.wpa_supplicant在external/wpa_s ...
- informix中if else使用_面试官:代码中出现大量的if/else,需要优化,你有什么好方案?...
每晚10点,捕获技术思考和创业资源洞察.分享职场生活.职场攻略.领导同事相处技巧和创业资源 文|洪生鹏 本文旨在抛砖引玉,具体实施方案需要自己在实践中动手去尝试,不断尝试,不断改进调优. if els ...
最新文章
- Microsoft HoloLens 入华一周年,都有哪些进展?
- Linux配置免密登录
- 经典的异或题:只出现一次的数字
- Microsoft加入量子计算的竞争
- OpenCV C++ 10 - Invert Images
- php switch case 判断语句,PHP的switch判断语句的“高级”用法详解,switch详解_PHP教程...
- 洛谷P1108 低价购买[DP | LIS方案数]
- Silverlight 4 初学者的10大经典问答
- 如何通过eclipse查看、阅读hadoop2.4源码
- java递归用for实现_用java实现的经典递归算法
- c10k java_c10k问题及其解决方案
- C#绘制简单围棋棋盘
- 网络存储专有名词介绍
- error: Failed dependencies: 	mariadb-libs is obsoleted by MySQL-shared-compat-5.6.46-1.el7.x86_64
- 取消web浏览器 打印页眉和页脚
- 磁盘被写保护怎么办?5个方案解除它
- 如何自学?Android开发学习路线指南,最详资料解析
- exam平台Java试题阶段(一)
- 这篇3万字的Java后端面试总结,面试官看了瑟瑟发抖(汇总)
- 4-tensorflow中张量的数学运算
热门文章
- python基础之面向对象编程
- python合并 txt
- PCA的本质----特征值分解
- jQuery框架学习第六天:jQuery中的Ajax应用
- DWZ中navTab使用解析
- [深度学习-优化]梯度消失与梯度爆炸的原因以及解决方案
- iris数据集_sklearn日志(二)训练集和测试集划分
- Going Further with Point Pair Features: PPF, 如何走的更远?
- 吴恩达深度学习 —— 3.7 为什么需要非线性激活函数
- Towards Efficient Privacy-Preserving Inspection of TLS Encrypted Traffic