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

💡 原文中文,约1300字,阅读约需3分钟。
📝

内容提要

本文讨论了为什么复位中断服务程序中直接调用了main函数,解释了单片机的操作模式和两种特权等级。复位中断和普通中断的操作模式不同,由内核决定。这是关于Cortex-M单片机内核的知识点。

🔎

延伸解读

复位中断与普通中断的模式差异

文章指出,复位中断(Reset_Handler)和普通中断(如SysTick_Handler)虽然都是中断,但操作模式不同。复位后处理器进入特权级的Thread模式,而普通中断进入特权级的Handler模式。这种差异由内核决定,因此main函数在复位中断中被调用时,实际运行在Thread模式,而非Handler模式。

Cortex-M的操作模式与特权等级

Cortex-M3内核支持两种操作模式(Handler和Thread)和两个特权等级(特权级和用户级)。复位后默认处于特权级Thread模式,而异常处理通常进入Handler模式。理解这些模式有助于解释为何main函数看似在中断中执行,实则运行环境不同。

对开发实践的启示

虽然这个问题在日常开发中很少遇到,但了解复位中断与普通中断的模式区别,能帮助开发者更深入理解Cortex-M内核的异常模型。不同IDE(如Keil、GCC)在此点上行为类似,因为模式切换由内核硬件决定,与编译环境无关。

❓

Q&A

为什么复位中断服务程序中直接调用了main函数?

因为复位中断(Reset_Handler)是单片机启动后的第一个中断,它负责初始化并调用main函数,所以main函数确实是在复位中断中被调用的。

Cortex-M3单片机支持哪些操作模式和特权等级?

Cortex-M3支持两种操作模式:Handler模式和Thread模式;以及两个特权等级:特权级和用户级。

复位后处理器进入什么模式?

复位后,处理器进入特权级的Thread模式。

普通中断(如SysTick)执行时处于什么模式?

普通中断(如SysTick_Handler)执行时,处理器进入特权级的Handler模式。

复位中断和普通中断的操作模式有什么不同?

复位中断(Reset_Handler)在特权级的Thread模式下执行,而普通中断(如SysTick_Handler)在特权级的Handler模式下执行。

中断的操作模式是由什么决定的?

中断的操作模式由内核决定,不同IDE(如Keil、GCC)道理类似,但根本在于Cortex-M内核的机制。

🏷️

标签

➡️

继续阅读