注册 登录
查看: 612|回复: 10

__main() 和 main()的天壤之别

[复制链接]
发表于 2014-9-16 09:26:35 | 显示全部楼层 |阅读模式
本帖最后由 gsc617 于 2014-9-16 09:37 编辑

     你有没有读过程序启动头文件? 你知道头文件里面做了什么吗? C语言真的从 main 函数开始吗?运行时库是什么?


    当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序,即呼叫主应用程序。最简单的一种情况是:
    IMPORT   main
    B            main
   
    直接从启动代码跳转到应用程序的主函数入口,当然主函数名字可以由用户随便定义。


    在ARM ADS环境中,还另外提供了一套系统级的呼叫机制。
    IMPORT   __main
    B            __main

    __main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()。所以说,前者是库函数,后者就是我们自己编写的main()主函数;

    因此我们用的B __main其实是执行库函数,然后该库函数再调用我们的main() 函数,因此在单步调试时会看到先要跑一段程序(其实是库函数),然后再单步到我们自己的main函数(这个同时也说明如果有B __main


则就对应必须有main函数,否则编译出错),如果我们用 B main来进入我们的主函数的话,那在单步调试时就看到直接进入到我们自己的main函数了,中间不会看到其他程序;

这是在别的论坛上看到这个贴子,想和大家分享一下,说实话我没有完全看懂和理解,才把它在山外论坛重新发一下新帖,


方便以后自己重新学习,希望大家补充,共同学习,参考原链接:http://www.amobbs.com/forum.php? ... 7&page=1#pid5696316
回复

使用道具 举报

发表于 2014-9-16 11:27:35 | 显示全部楼层
一个是自己写的主函数,一个是带了编译器自带的,带初始化的函数,最后跳到main
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-16 12:28:09 | 显示全部楼层
山外メ雲ジ 发表于 2014-9-16 11:27
一个是自己写的主函数,一个是带了编译器自带的,带初始化的函数,最后跳到main

恩恩,  __main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()。

我也就懂这点而已
回复 支持 反对

使用道具 举报

发表于 2014-9-16 12:29:42 | 显示全部楼层
gsc617 发表于 1410841689
恩恩,  __main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()。

我也就懂这点而已
__mian 干的活,其实就是我们k60例程里的common_startup函数,你可以研究一下这个函数。
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

发表于 2014-9-16 12:47:21 | 显示全部楼层
MDK 里面自带的函数。不同编译器,名字可能有所不同。
回复 支持 反对

使用道具 举报

发表于 2014-9-16 12:47:45 | 显示全部楼层
山外メ雲ジ 发表于 2014-9-16 12:29
__mian 干的活,其实就是我们k60例程里的common_startup函数,你可以研究一下这个函数。

其实,就是复制数据到内存,初始化系统
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-16 14:41:48 | 显示全部楼层
虚竹 发表于 2014-9-16 12:47
MDK 里面自带的函数。不同编译器,名字可能有所不同。

哦哦哦,原来是这样子的,k60例程里的common_startup函数怎么查看,能查看嘛
回复 支持 反对

使用道具 举报

发表于 2014-9-16 14:45:06 | 显示全部楼层
gsc617 发表于 2014-9-16 14:41
哦哦哦,原来是这样子的,k60例程里的common_startup函数怎么查看,能查看嘛

工程代码里就有啊,直接Source Insight打开,搜索一下就找到
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-16 18:05:10 | 显示全部楼层
汤静云 发表于 2014-9-16 14:45
工程代码里就有啊,直接Source Insight打开,搜索一下就找到

在IAR中怎么看
回复 支持 反对

使用道具 举报

发表于 2014-9-16 18:44:37 | 显示全部楼层

IAR 有搜索功能,直接搜索这个函数名就好。
回复 支持 反对

使用道具 举报

发表于 2014-9-16 19:03:21 | 显示全部楼层
学习了,顶一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部