//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()的区别相关推荐

  1. ARM启动代码中_main 与用户主程序main()的区别

    STM32启动代码主要是分配堆栈及设置向量表,然后跳转到__main函数. 跳转具体到代码段部分如下: Reset_Handler PROC EXPORT Reset_Handler [WEAK] I ...

  2. Linux中main和初启函数,main 中的 argv和argc 到底是个啥意思?

    原标题:main 中的 argv和argc 到底是个啥意思? 前言 一般我们平时写main函数的话,一般都是写不带参数的比较多,而且也习惯了这样写:其实标准的形式写法,main函数是带两个参数的,这两 ...

  3. 嵌入式ARM启动代码的工作

    嵌入式ARM启动代码的工作 (1)定义代码的初始入口点:初始入口点是指代码运行时的起始点,它在每个映像文件中是唯一的,也是每个可执行的映像文件             所必须含有的,而且必须位于映像文 ...

  4. (八)cmockery中的calculator和run_tests函数的注释代码

        所分析的calculator.c和calculator_test.c文件位于 工程中的 cmockery/src/example/ 目录下,是一个相对而言比较全面的样例程序,用到了cmocke ...

  5. python pow函数用法_Python代码中pow()函数具有哪些功能呢?

    摘要: 下文讲述Python代码中pow()函数的功能说明,如下所示: pow函数功能说明 pow() 函数用于 计算 xy(x 的 y 次方) 的值 pow函数语法: import math mat ...

  6. python中format函数作用_Python代码中format函数具有哪些功能呢?

    摘要: 下文讲述Python代码中format函数的功能说明,如下所示: format函数功能说明 format函数功能: 用于格式化字符串 format函数语法: format采用{} 和 : 来代 ...

  7. php中分页公式,php分页函数完整实例代码

    本文分享一例php分页函数完整实例代码,使用此函数实现分页效果很不错.分享给大家供大家参考. 具体功能代码如下: /* * Created on 2011-07-28 * 使用方法: require_ ...

  8. Android 中的WiFi学习笔记(转载)----WIFI启动 代码流程走读---网络连接流程

    Android的WiFi 我们通常看到WiFi的守护进程wpa_supplicant在我们的ps的进程列表中,这个就是我们的wifi守护进程.wpa_supplicant在external/wpa_s ...

  9. informix中if else使用_面试官:代码中出现大量的if/else,需要优化,你有什么好方案?...

    每晚10点,捕获技术思考和创业资源洞察.分享职场生活.职场攻略.领导同事相处技巧和创业资源 文|洪生鹏 本文旨在抛砖引玉,具体实施方案需要自己在实践中动手去尝试,不断尝试,不断改进调优. if els ...

最新文章

  1. Microsoft HoloLens 入华一周年,都有哪些进展?
  2. Linux配置免密登录
  3. 经典的异或题:只出现一次的数字
  4. Microsoft加入量子计算的竞争
  5. OpenCV C++ 10 - Invert Images
  6. php switch case 判断语句,PHP的switch判断语句的“高级”用法详解,switch详解_PHP教程...
  7. 洛谷P1108 低价购买[DP | LIS方案数]
  8. Silverlight 4 初学者的10大经典问答
  9. 如何通过eclipse查看、阅读hadoop2.4源码
  10. java递归用for实现_用java实现的经典递归算法
  11. c10k java_c10k问题及其解决方案
  12. C#绘制简单围棋棋盘
  13. 网络存储专有名词介绍
  14. error: Failed dependencies: mariadb-libs is obsoleted by MySQL-shared-compat-5.6.46-1.el7.x86_64
  15. 取消web浏览器 打印页眉和页脚
  16. 磁盘被写保护怎么办?5个方案解除它
  17. 如何自学?Android开发学习路线指南,最详资料解析
  18. exam平台Java试题阶段(一)
  19. 这篇3万字的Java后端面试总结,面试官看了瑟瑟发抖(汇总)
  20. 4-tensorflow中张量的数学运算

热门文章

  1. python基础之面向对象编程
  2. python合并 txt
  3. PCA的本质----特征值分解
  4. jQuery框架学习第六天:jQuery中的Ajax应用
  5. DWZ中navTab使用解析
  6. [深度学习-优化]梯度消失与梯度爆炸的原因以及解决方案
  7. iris数据集_sklearn日志(二)训练集和测试集划分
  8. Going Further with Point Pair Features: PPF, 如何走的更远?
  9. 吴恩达深度学习 —— 3.7 为什么需要非线性激活函数
  10. Towards Efficient Privacy-Preserving Inspection of TLS Encrypted Traffic