加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 总结
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

单片机main函数在中断函数里执行?

2022/10/24
2628
阅读需 4 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

作者 | strongerHuang

微信公众号 | strongerHuang

最近看了硬汉分享的一个内容:为什么复位中断服务程序里面直接调用的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 单片机内核的一个知识点。

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
AT24CM01-XHM-B 1 Atmel Corporation EEPROM, 128KX8, Serial, CMOS, PDSO8, 4.40 MM, GREEN, PLASTIC, MO-153AA, TSSOP-8

ECAD模型

下载ECAD模型
$1.62 查看
XRCGB25M000F3M00R0 1 Murata Manufacturing Co Ltd Parallel - Fundamental Quartz Crystal, 25MHz Nom, ROHS COMPLIANT PACKAGE-4

ECAD模型

下载ECAD模型
$0.25 查看
KSZ8081MLXCA 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQFP48
$1.65 查看

相关推荐

电子产业图谱

作者黄工,从事嵌入式软件开发工作8年有余,高级嵌入式软件工程师,业余维护公众号『strongerHuang』,分享嵌入式软硬件、单片机、物联网等内容。