最近看了硬汉分享的一个内容:为什么复位中断服务程序里面直接调用的main函数,难道所有程序都在复位中断里面执行的?
首先,Reset_Handler 是单片机的一个中断,其次,main 函数也确实被 Reset_Handler 中断调用了。那不是,main函数在中断里执行?
看到这个问题,你是否也曾想过这个问题,难道我们以前的认识错了?
说实话,我都没曾想过这个问题,我觉得绝大多数人都没有想过这个问题。所以,这里顺便分享一下这个问题的内容。
单片机的操作模式
这里的单片机,主要指 ARM Cortex-M 内核单片机。
要回答开篇那个问题,就要提到单片机的操作模式,这里以 Cortex‐M3 单片机为例,Cortex‐M3 支持两种模式和两个特权等级。
两种模式:
Handler 模式
Thread 模式
两个等级:
特权级
用户级
在 Cortex‐M3 手册中有这么一段:
其中,开篇问题的答案,我圈出来了。
官方的在线文档也提到了相关的说明:
地址:
https://developer.arm.com/documentation/dui0552/a/the-cortex-m3-processor/exception-model/exception-types
示例分析
上面圈出了答案,可能你还是蒙的,这里结合 Keil MDK + STM32 的工程代码给大家简单对比分析一下。
1.进入Reset_Handler中断我们在线调试时,复位状态,进入 Reset_Handler 复位中断:
此时,就是文档中提到的:在复位后,处理器进入特权级的Thread模式。
2.进入SysTick_Handler中断当我们进入普通中断,比如这里进入 SysTick_Handler 时钟滴答中断:
此时,我们进入的是特权级的Handler模式。
看到这里,想必你应该明白了。
总结
这个问题,关键点就是:
复位中断(Reset_Handler)和普通中断(SysTick_Handler)的操作模式不一样。
其他IDE,比如Keil、GCC等编译环境道理类似,这个问题主要在于内核,也就是由内核决定。
可能你从来没有关心过这个问题,当然,我们也很少遇到与之对应的问题。
这是一个不是问题的问题,不了解也没关系,你今天看到了也算进一步了解了 Cortex-M 单片机内核的一个知识点。
上一篇:MCU复位和程序启动那些事
下一篇:单片机自定义协议FIFO高效发送数据方法
推荐阅读最新更新时间:2024-11-09 18:01
推荐帖子
- 这个电路最小输出怎么计算?
- 当uA7805与431这么连接,求最小输出的计算公式?这个电路最小输出怎么计算?TL431是个带有内部基准电压的反馈放大器,其特性可以简单地概括为总是使REF端保持2.5V。所以此电路Vo等于2.5V*(R1+R2)/R2。但TL431的K端(图中与7805相联接的那一端)最小电压为2.5V,而7805的OUT端与公共端总是5V,所以Vo不能小于(2.5V+5V),即R1应该大于R2的二倍。【这个电路最小输出怎么计算?】由前述,该电路最小输出电压为7.5V。要
- Knight97538 电源技术
- 【GD32E503评测】基于uCOSIII项目实现U盘功能1
- 前言:在驱动LCD屏幕的时候,需要用到字库、图片等数据,。比方我们要显示汉字那么流程如下制作字库生成.bin文件,例如通过字库制作文件生成gb2312.bin文件,并将gb2312.bin文件写入flash。Mcu解析中文字符,得到gb2312索引值,根据字库的大小计算得到flash的位置。读取相应数据。Mcu将读取到的数据发送给lcd屏幕进行显示。在实现上述过程时,遇到了个问题,那就是gb2312.bin这个文件该如何传输到flash中呢?我有如下几个方法: 通
- eew_YeKTCB 国产芯片交流
- 【CW32L052测评】+彩色LCD屏驱动显示
- 尽管开发板已配置了液晶显示屏,但在图像的表现力上还是离不开彩色LCD屏的使用。这里所用的是一种0.96寸的彩色屏,并采用SPI接口工作。显示屏与开发板的连接关系为:CLK---PB08DIN---PB09RST---PF04DC---PF05CS---PF06BLK---PF07所用引脚输出高低电平的语句定义为:#defineOLED_SCLK_Set()PB08_SETHIGH()#defineOLED_SCLK_Clr()
- jinglixixi 国产芯片交流
- 华晨1.8T动力系统细节解读
- 转:一提到发动机,国人心中就充满了痛楚,中国的汽车工业走过了风风雨雨的五十年,这五十多年却被国外讥笑为“没有自己发动机工业的五十年”,做为后起之秀的华晨、吉利、奇瑞坚持自主路线,都各自在核心技术上获得突破。和做低端起步的吉利、奇瑞不同,华晨集合各项关键技术,从高端做起,着手研发1.8T发动机,已于26日正式量产。华晨1.8T发动机可以说是拉开了国机时代的序幕,各大网站都在报道相关事件,但是您知道这款发动机的详细参数和技术特性么
- gaoyanmei 汽车电子
- IIC学习经历以及CAT1024/25
- 对于IIC来说只有两条线来控制数据的传输,SDA和SCL。对于IIC协议的学习,要掌握四种模式,主发送,主接收,从发送和从接收。在对设备的读写操作信号是在发送从地址时将其一起发送出去,比如主发送模式,它要从从设备中读取数据,那么在主设备就要在发送完地址后,再改变模式,改为主接收模式才能接收数据。在S3C2440A的处理器中,里面已经集成了IIC控制器了,在控制器中已经集成了IIC的时序,我们不需要去管时序该怎么走,而是设置好寄存器来控制IIC的发送和传输数据。在IIC控制器的寄存器中有几个寄
- wangfwk ARM技术
- 【花雕体验】09 行空板硬件控制pinpong库的系列测试(之二)
- 行空板板身集成了光线传感器、麦克风、蜂鸣器、Wifi、蓝牙、加速度传感器、按键,正面配置有一块LCD彩屏,可实时呈现多种Python运行结果,包括文字、图片、视频,游戏画面,以及数据图表等。【花雕体验】01上手行空板https://bbs.eeworld.com.cn/thread-1206624-1-1.html【花雕体验】02行空板简单使用https://bbs.eeworld.com.cn/thread-1206649-1-1.html【花雕体验】0
- eagler8 MicroPython开源版块