首页 > 其他分享 >__main和主函数main()区别++++修改主函数名称的方法

__main和主函数main()区别++++修改主函数名称的方法

时间:2023-07-05 10:02:44浏览次数:80  
标签:__ rt 调用 函数 main 库函数

一、__main和main()之间的关系

startup__ec618.s启动文件里面的Reset_Handler:

 

调用过程:

 

  1. stm32在启动后先进入重启中断函数Reset_Handler,其中会先后调用SystemInit和__main函数,

  2. __main函数属于c库函数,其内部依次进行三步工作,即先初始化rw段,然后初始化zi段,最后调用另一个c库函数__rt_entry(),

  3. __rt_entry()该函数先初始化堆栈和库函数,然后即调用主函数main(),从而进入用户程序。可以看出主函数main()若退出,则在__rt_entry()最后会再调用exit()函数进行退出操作。

  4. __main和__rt_entry这俩函数实际上我都没能力进的去,我也是找网上大神逆向分析出来的“借鉴”学习一下

总结:stm32启动文件里面Reset_Handler最后调用了__main,而在__main里面最后调用了__rt_entry(),然后__rt_entry()在做完堆栈和库函数初始化工作之后才调用main()。

二、修改主函数名称的方法

 

  Reset_Handler中导入和执行的**__main函数换成自己在c文件里随便定义的函数**即可,比如上图的testmain,我现在就是把在c文件里面定义的testmain函数作为主函数来用的。

  注意这里有个误区,有的人可能会将__main换成比如__testmain,然后实际自己定义的是testmain,这样编译肯定通不过,然后就说什么stm32的主函数名改不了。因为__testmain没有定义啊,这个和__main不一样,main是c的库函数,标准库自己包含的,**它是在内部调用的main(),而不是编译过程给它去掉了两个下划线**

  但由于**__main函数除了调用main()以外在前后还有初始化堆栈和库函数、调用exit()的操作**,而我这里直接把__main函数替换成自己想要运行的函数则不包含那些操作,换句话说启动文件前面设置的堆和栈大小都白设置了,库里面有的值如果有设置的也白设置了,现在都成了默认的值,还有exit()里面有啥特别的用处也不了解,等于把一个本来该有但未知用途的模块删了,这肯定是不行的。

参考博客

标签:__,rt,调用,函数,main,库函数
From: https://www.cnblogs.com/zhouxingxing7920/p/17527739.html

相关文章

  • Sentieon | 每周文献-Population Sequencing-第一期
    群体基因组系列文章-1标题(英文):TheImpactofACEsonBMI:AnInvestigationoftheGenotype-EnvironmentEffectsofBMI标题(中文):ACEs对BMI的影响:探究BMI的基因型-环境效应发表期刊:BehaviorGenetics作者单位:美国俄勒冈州立大学心理学系发表年份:2022文章地址:https://doi.......
  • Sentieon实战:NGS肿瘤变异检测流程
      肿瘤基因突变检测是NGS的一个重要应用,其分析难点主要在于低频变异的准确性。不同于遗传病检测,肿瘤样本类型多样,测序方法和参数复杂,且缺乏对应各种场景的公共标准真集。再加上常用开源软件经常遇到的准确性低,稳定性差,速度慢等问题。这使得广大诊断公司在评估肿瘤变异检测工具......
  • 加速体细胞突变检测分析流程-系列2(ctDNA等高深度样本)
    Sentieon●体细胞变异检测系列-2  Sentieon致力于解决生物信息数据分析中的速度与准确度瓶颈,通过算法的深度优化和企业级的软件工程,大幅度提升NGS数据处理的效率、准确度和可靠性。 针对体细胞变异检测,Sentieon软件提供两个模块:TNscope和TNhaplotyer2。 TNscope:此模......
  • 体细胞突变检测分析流程-系列1( WES&Panel)
    Sentieon●体细胞变异检测-系列1 Sentieon致力于解决生物信息数据分析中的速度与准确度瓶颈,通过算法的深度优化和企业级的软件工程,大幅度提升NGS数据处理的效率、准确度和可靠性。 针对体细胞变异检测,Sentieon软件提供两个模块:TNscope和TNhaplotyer2。 TNscope:此模块......
  • Sentieon | 每周文献-Tumor Sequencing-第三期
     肿瘤测序系列文章-1标题(英文):Therelationshipbetweengeneticcharacteristicsandclinicalcharacteristicsandtheefficacyof 131Itherapyinchildrenandadolescentswithlocallyadvancedormetastaticdifferentiatedthyroidcancer标题(中文):局部晚期或......
  • 8086汇编语言精讲2 :寄存器
        mov就是赋值;add就是+=; 为什么044CH(0可去,因为是高位补的0),也就是44CH<十六进制数在十六位下最大数FFFFH(也就是16=2^4)=65535D(D指的十进制,H指的十六进制),所以是不算溢出,因为C本来就是十六位进制中的一个位值,和1-9是一样的.Tips:如果使用十进制中的数代......
  • debian_ubuntu配置sock/socks5h/http/https代理
    编辑用户变量vi~/.bashrc添加以下代码#setproxyfunctionproxy_set(){exportMY_PROXY=socks5h://192.168.10.25:1080exportno_proxy="localhost,127.0.0.0/8,::1/128,.local,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12"exporthttp_proxy=${MY......
  • 方芳:非物质文化遗产学习整理笔记(10-13)
    武汉市江夏路桥工程有限公司中央财经大学 经济管理学院    方   芳    15927602711第十章 传统技艺、技能与技术传统技艺、技能与技术是指劳动人民在生产和生活中创追出的知识和技艺、技能和技术,它包括传统技艺、传统体育、游艺与杂技、传统医药等。......
  • python解析json数据
    python解析json数据demodata={"name":"John","age":30,"hobbies":["reading","running","swimming"],"scores":[85,90,95]}forkey,valueindata.items()......
  • 34最优化算法
    好的,以下是常见最优化算法的公式,使用Markdown格式进行展示:1.梯度下降法(GradientDescent):参数更新公式:\(\theta^{(t+1)}=\theta^{(t)}-\alpha\nablaJ(\theta^{(t)})\)2.随机梯度下降法(StochasticGradientDescent):参数更新公式:\(\theta^{(t+1)}=\theta^{(t)}-......