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

发布时间:2023-03-28  

最近看了硬汉分享的一个内容:为什么复位中断服务程序里面直接调用的main函数,难道所有程序都在复位中断里面执行的?




首先,Reset_Handler 是单片机的一个中断,其次,main 函数也确实被 Reset_Handler 中断调用了。那不是,main函数在中断里执行?


看到这个问题,你是否也曾想过这个问题,难道我们以前的认识错了?


说实话,我都没曾想过这个问题,我觉得绝大多数人都没有想过这个问题。所以,这里顺便分享一下这个问题的内容。


单片机的操作模式

这里的单片机,主要指 ARM Cortex-M 内核单片机。


要回答开篇那个问题,就要提到单片机的操作模式,这里以 Cortex‐M3 单片机为例,Cortex‐M3 支持两种模式和两个特权等级。


两种模式:

  • Handler 模式

  • Thread 模式


两个等级:

  • 特权级

  • 用户级


在 Cortex‐M3 手册中有这么一段:


其中,开篇问题的答案,我圈出来了。


官方的在线文档也提到了相关的说明:


地址:

developer.arm.com/docum


示例分析

上面圈出了答案,可能你还是蒙的,这里结合 Keil MDK + STM32 的工程代码给大家简单对比分析一下。


1.进入Reset_Handler中断我们在线调试时,复位状态,进入 Reset_Handler 复位中断:




此时,就是文档中提到的:在复位后,处理器进入特权级的Thread模式。

2.进入SysTick_Handler中断当我们进入普通中断,比如这里进入 SysTick_Handler 时钟滴答中断:




此时,我们进入的是特权级的Handler模式。

看到这里,想必你应该明白了。


总结

这个问题,关键点就是:

复位中断(Reset_Handler)和普通中断(SysTick_Handler)的操作模式不一样。


其他IDE,比如Keil、GCC等编译环境道理类似,这个问题主要在于内核,也就是由内核决定。


可能你从来没有关心过这个问题,当然,我们也很少遇到与之对应的问题。


这是一个不是问题的问题,不了解也没关系,你今天看到了也算进一步了解了 Cortex-M 单片机内核的一个知识点。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    以灌电流的方式接了一只LED,当按键按下时LED灯点亮,没按键时LED灯熄灭。 4中断的软件实现 单片机中断函数的写法比较固定,51单片机中断函数的写法如下: void Initd() interrupt......
    51单片机外部中断点亮LED;外部中断软件设计原理 中断发生的三个条件 ①中断源有中断请求; ②此中断源的中断允许位为 1; ③CPU 开中断(即 EA=1)。 比如我们配置外部中断 0,对应......
    分钟!!! 这个单片机晶振频率为11.0592mhz,和大部分时钟的晶振频率相同,应该没有问题。 后天考虑到源代码: 在定时器中断函数里: void t0(void) interrupt 1......
    分钟!!! 这个单片机晶振频率为11.0592mhz,和大部分时钟的晶振频率相同,应该没有问题。 后天考虑到源代码: 在定时器中断函数里: void t0(void) interrupt 1......
    uart() interrupt 4 { if(RI) {     RI = 0;     key_num = SBUF;   //串口接收 } } 将这段代码同时下载到两个单片机中就实现两个单片机......
    M20 中断、定时器与程序存储方式; void main() //主程序 不同单片机写法基本一致{}interrupt() //不同单片机 中断程序写法不同{} 多个......
    T0 }   咯咯咯 实例 55:方式 0 控制流水灯循环点亮 #include // 包含 51 单片机寄存器定义的头文件#include // 包含函数 _nop_()定义的头文件unsigned......
    环中的其他逻辑         // ...     } } 这其中,void ExternalInterrupt_Service () interrupt 0 一行是51单片机中断服务函数,已经由半导体厂家设计完毕,我们......
    [1]=DATA1; Data[2]=DATA2; Data[3]=DATA3; Data[4]=DATA4; Data[5]=DATA5; Data[6]=DATA6; } //单片机端发送数据函数......
    51单片机定时器中断基础;一、中断概念 中断是为使单片机具有对外部或者内部随机发生的事件实时处理而设置的。 把自己想象成单片机的CPU,你正在洗衣服,但是突然快递小哥给你打电话让你去拿快递,于是......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>