stm32启动文件里面的__main和主函数main()

news/2024/5/12 2:56:30

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

先来对stm32启动过程简单学习

启动文件里面的Reset_Handler:
在这里插入图片描述

调用过程:
在这里插入图片描述

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

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

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

__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()里面有啥特别的用处也不了解,等于把一个本来该有但未知用途的模块删了,这肯定是不行的。因此在stm32平台上尽量还是不要自己擅自修改main函数名称。

Linux main启动参考:主函数main和程序入口_start


http://www.mrgr.cn/p/66545103

相关文章

【代码审计+基础知识】-1

一、代码审计必备知识

PHP代码审计(二)常见漏洞篇

注入类 命令注入将用户输入拼接到命令行中执行 导致的任意命令执行问题<?php $command = ping -c 1 .$_GET[ip]; system($command); //system函数特性 执行结果会自动打印 ?>此处输入ip参数无任何过滤限制 get输入ip=127.127.127.127 如果是非法输入:ip=127.127.127.1…

http模块—http请求练习

题目要求&#xff1a;搭建如下http服务&#xff1a; 1.当浏览器向我们的服务器发送请求时&#xff0c;当请求类型是get请求&#xff0c;请求的url路径地址是/login。响应体结果是登录页面 2.当浏览器向我们的服务器发送请求时&#xff0c;当请求类型是get请求&#xff0c;请求…

软考中级软件设计师【结构化开发】知识点+题目

一、耦合耦合是模块之间的相对独立性(相互连接的紧密程度)的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型等,有以下几个类型。无直接耦合:指两个模块之间没有直接关系,它们分别属于不同模块的控制和调用,它们之间不传递任何信息,…

【C/C++】C++中的四种强制类型转换

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

如何使用Java代码混淆技术保护您的应用程序

摘要 本文探讨了代码混淆在保护Java代码安全性和知识产权方面的重要意义。通过混淆技术,可以有效防止代码被反编译、逆向工程或恶意篡改,提高代码的安全性。常见的Java代码混淆工具如IPAGuard、Allatori、DashO、Zelix KlassMaster和yGuard等,为开发者提供了丰富的选择。本文…

【专题】2022年中国制造业数字化转型研究报告PDF合集分享(附原数据表)

报告链接:http://tecdat.cn/?p=32145 本文中所说的制造业数字化转型,指的是在制造企业的设计、生产、管理、销售及服务的每一个环节中,将新一代信息技术应用到制造企业的设计、生产、管理、销售及服务的每一个环节中,并可以以每一个环节中产生的数据为基础,展开控制、监测…

15K star!一款功能强悍的手机电脑同屏工具,开源无需root!

在日常工作、生活场景中&#xff0c;经常会遇到需将手机与电脑屏幕进行共享。 今天就给大家推荐一款Android实时投屏神器&#xff1a;QtScrcpy。 它可以通过 USB / 网络连接Android设备&#xff0c;并进行显示和控制&#xff0c;且无需root权限。 1、简介 QtScrcpy是一款功…

redis自学(25)过期策略

Redis内存回收 Redsi之所以性能强,最主要的原因就是基于内存存储。然而但决断的redis其内存大小不宜过大,会影响持久化或者主从同步性。 我们可以通过修改配置文件来设置redis的最大内存:当内存使用达到上限时,就无法存储更多数据了 过期策略 在学习redis缓存的时候我们说过…

同一SAP系统下使用SCC1跨客户端(client)传输配置

abap开发中会涉及到一些配置的,也会生成定制请求,比如说BTE中的配置,webservice中的端口配置。 这些配置并不是跨client的,通常一个SAP系统内会有多个client,比如,开发机系统内存在两个client,100和200,100下是纯开发client,200下会有一点简单测试数据,100,200之间的…

金融案例:构建高效统一的需求登记与管理方案

在金融行业数字化转型背景下,银行等金融机构面临着业务模式创新与数据应用的深度融合。业务上所需要的不再是单纯的数据,而是数据背后映射的业务趋势洞察,只有和业务相结合转化为业务度量指标,经过数据分析处理呈现为报表进行展示,才能真正体现它们的价值。 但在需求转化为…

docker search xxx出现报错:docker 报错Error response from daemon: x509:

问题可能出现在daemon.json配置文件 1、打开此文件:vi /etc/docker/daemon.json,把境像地址换成:https://docker.mirrors.ustc.edu.cn2、然后重启服务器:reboot (或者重启docker使用daemon.json配置文件生效也行)重启后可以成功搜索了,随便搜索个tomcat吧:docker search …

精品凉拌菜系列热卤系列课程

这一系列课程涵盖精美凉拌菜和美味热卤菜的制作技巧。学员将学习如何选材、调味和烹饪&#xff0c;打造口感丰富、色香俱佳的菜肴。通过实践训练&#xff0c;掌握独特的烹饪技能&#xff0c;为家庭聚餐或职业厨艺提升增添亮点。 课程大小&#xff1a;6.6G 课程下载&#xff1…

记一次cast使用问题

适用范围 PostgreSQL 问题概述 昨天开发请求一个问题,在PostgreSQL数据库中创建了CAST(numeric as varchar),但是在进行模糊查询时,抛出如下错误: ERROR: operator does not exist: integer ~~ unknown LINE 1: select * from t1 where id like %1%;^ HINT: No operator …

Vscode创建php项目

1.安装中文插件&#xff08;可安装可不安装&#xff09; 2.安装主题&#xff08;可安装可不安装&#xff09; 3.安装和php相关的插件 4.打开文件夹 5.路由操作 查看项目中的route路由 浏览器中访问think 隐藏index.php入口文件 访问ThinkPHP5.1开发手册&#xff0c;复制apa…

方差与标准差

标准差,反映了一组数与平均值的紧密关系。 举例,有一组数,4,5,9,11,16。 第一步:求出平均值。 (4+5+9+11+16)5=9 第二步:求出各数与平均数的差 分别为,-5,-4,0,2,7 第三步:把差平方一下(目的就是转成正数) 结果为,25,16,0,4,49 第四步:把平方后的数求一个平均…

P1265 公路修建

原题链接 题解 1.每个城市选择一个与它最近的城市 2.如果三个或以上的城市申请修建的公路成环。如下图,A 申请修建公路 AB,B 申请修建公路 BC,C 申请修建公路 CA。则政府将否决其中最短的一条公路的修建申请; 但是这条不成立,请看这条题解 或者下图由此得出这题就是最小生…

手写SpringBoot(二)之动态切换Servlet容器

系列文章目录 手写SpringBoot&#xff08;一&#xff09;之简易版SpringBoot 手写SpringBoot&#xff08;二&#xff09;之动态切换Servlet容器 手写SpringBoot&#xff08;二&#xff09;之动态切换Servlet容器 文章目录 系列文章目录手写SpringBoot&#xff08;二&#xff…

在服务器(Ubuntu20.04)安装用户级别的cuda11.8(以及仿照前面教程安装cuda11.3后安装cudnn和pytorch1.9.0)

1、cuda11.8的下载 首先在cuda官网下载我们需要的cuda版本&#xff0c;这里我下载的是cuda11.8&#xff08;我的最高支持cuda12.0&#xff09; 这里我直接使用wget命令下载不了&#xff0c;于是我直接在浏览器输入后面的链接下载到本地&#xff0c;之后再上传至服务器的&am…