当前位置: 首页 > news >正文

【不是问题的问题】为什么复位中断服务程序里面直接调用的main函数,难道所有程序都在复位中断里面执行的?

这个问题之前一直理所当然,没有深究过,认为就是复位中断服务程序退出后进入到main的,实际不然。
 

【视频版】

https://www.bilibili.com/video/BV1Le411V7jS

【不是问题的问题】为什么复位中断服务程序里面直接调用的main函数,难道所有程序都在复位中断里面执行的


【引出问题】

我们这里以MDK,IAR和GCC分别进行说明:

(1) MDK的处理:

main函数确实是在复位中断服务程序里面执行的:

 下面是__main的具体执行流程,其中调用了main,进入到main后,我们的程序就是一个死循环,一般不会退出main去执行exit():

 

 

(2)IAR的处理:

跟MDK的__main类似:

 

(3)GCC的处理:

这个过程是全开源的,也是类似流程。

 

【问题分析】

经过调试会发现个细节,正常情况下这个复位中断服务程序代码应该处于handler模式,而实际测试下竟然处于Thread线程模式。

 进一步看官方文档,锁定问题了:

 特别是最后一句:Execution restarts as privileged execution in Thread mode ,异常重新作为特权级线程模式执行。 也就是说上电复位或者手动复位,此时的复位中断服务器程序就是作为普通程序来执行的,已经不再是中断式的处理机制,就是简单的函数跳转到了main里面。

参考资料:

1、https://developer.arm.com/docume ... del/exception-types

2、MDK的C库启动过程和初始化,即__main函数的执行全过程
MDK的C库启动过程和初始化,即__main函数的执行全过程 - 开发环境 - 硬汉嵌入式论坛 - Powered by Discuz!

3、https://github.com/raspberrypi/p ... tandard_link/crt0.S
 

相关文章:

  • 【ViT 微调时关于position embedding如何插值(interpolate)的详解】
  • 动态内存管理(malloc free calloc realloc)
  • C语言/C++内存管理
  • 【FPGA】什么是串行通信?
  • c语言必背100代码,C语言代码大全(c语言必背项目代码)
  • JavaEE——No.2 套接字编程(TCP)
  • MacOS(M1)交叉编译安卓版本OpenCV(附带FFmpeg)
  • LSTM -长短期记忆网络(RNN循环神经网络)
  • 【老生谈算法】matlab实现频谱分析算法源码——频谱分析
  • Python013--爬虫01(工具准备)
  • 有营养的算法笔记五
  • 网络安全实战之靶场渗透技术
  • Vue项目使用百度地图api
  • RabbitMQ--基础--02--原理
  • 网页设计与开发-实验报告-1
  • 2017 年终总结 —— 在路上
  • 230. Kth Smallest Element in a BST
  • Angular 2 DI - IoC DI - 1
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java第三方包学习之lombok
  • maya建模与骨骼动画快速实现人工鱼
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • October CMS - 快速入门 9 Images And Galleries
  • sessionStorage和localStorage
  • SpringBoot几种定时任务的实现方式
  • 爱情 北京女病人
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 将 Measurements 和 Units 应用到物理学
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 用Python写一份独特的元宵节祝福
  • 怎么将电脑中的声音录制成WAV格式
  • 智能网联汽车信息安全
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​ArcGIS Pro 如何批量删除字段
  • # include “ “ 和 # include < >两者的区别
  • #《AI中文版》V3 第 1 章 概述
  • #define 用法
  • #define用法
  • #pragma multi_compile #pragma shader_feature
  • (python)数据结构---字典
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)计算机毕业设计ssm电影分享网站
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)VC++中ondraw在什么时候调用的
  • (转)用.Net的File控件上传文件的解决方案
  • (轉)JSON.stringify 语法实例讲解
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET 8.0 发布到 IIS
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .Net 代码性能 - (1)
  • .net 发送邮件
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径