原来单片机main函数在这里执行

发布者:MysticalWhisper最新更新时间:2023-09-05 来源: zhihu关键字:单片机  main函数  执行 手机看文章 扫描二维码
随时随地手机看文章

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


关键字:单片机  main函数  执行 引用地址:原来单片机main函数在这里执行

上一篇:单片机固件中加入版本信息的方法
下一篇:玩转单片机得弄明白DMA原理

推荐阅读最新更新时间:2024-11-08 11:58

AVR单片机教程——串口发送
到目前为止,我们的开发板只能处理很小量的数据:读取几个引脚电平,输出几个LED,顶多用数码管显示一个两位数字。至于输入一个指令、输出一条调试信息,甚至用scanf和printf来输入输出,在已经接触过的这些器件上是难以想象的。而本讲“串口发送”与下一讲“串口接收”,将打开这一扇大门。 硬件 本讲的主题是UART(Universal Asynchronous Receiver-Transmitter,通用异步收发器),俗称串口。实际上串口是串行接口的统称,在单片机领域通常指UART。“串行”的意思是每次传输一个bit,而一个字节的数据被拆成8个bit传输;相比之下并行总线可以一次传输一个或多个字节(这并不意味着并行总线一定优于串行总
[单片机]
AVR<font color='red'>单片机</font>教程——串口发送
单片机电子钟设计
这里给大家介绍一个51单片机电子钟汇编程序设计方法: org 00h a_bit equ 30h ;秒寄存器 b_bit equ 31h ;10秒寄存器 c_bit equ 32h ;分寄存器 d_bit equ 33h ;10分寄存器 e_bit equ 34h ;小时寄存器 f_bit equ 35h ;10小时集存器 org 0000h ajmp star org 0030h star: mov a,#00h ;把各个位全部清0 mov a_bit,a mov b_bit,a mov c_bit,a mov d_bit,a mov e_bit,a mov f_bit,a
[单片机]
A6_A7 GPS模块的51单片机例程
1.准备一个STC89C52最小系统板 2.烧录代码(先烧录代码后接线,防止接线后下载不了代码) 3.给模块供电,给模块开机 4.接线: STC89C52 A6&A7 GND - GND TXD/P3.1- U_RXD RXD/P3.0- U_TXD 单片机源程序如下: /********************************************************************* 作者:神秘藏宝室 本例程仅适用于在本店购买模块的用户使用,鄙视其它店铺的盗用行为 版权所有,盗版必究!!! A6模块链接
[单片机]
涡街流量计的二次仪表设计
1 引言   随着现代工业自动化水平的不断提高,在很多情况下需要集中监测多个流量点,如在石油注水开采过程中,为了保持开采效果、保护地下环境及随后分析注水数据,需要对注水量进行监测,在油田系统中逐渐使用智能仪表来计量油井的出油量。计量仪表精确度的高低直接影响企业的经济效益。目前,我国的流量计起步晚,起点低,还比较落后。使用单片机开发的流量计作为二次仪表是非常适用的,对油田自动化有很大的促进。 2 系统原理    就整体结构而言,流量计主要由涡街流量传感器、前置放大器、计数显示单元组成。涡街流量传感器主要由漩涡发生体、漩涡频率检测器和壳体构成,其作用是产生稳定和强烈的漩涡,并检出产生漩涡的频率和输出与漩涡频率成正比的电信号。漩涡发生
[测试测量]
解决EMC单片机多次烧录的办法
一般来说,EMC的OTP类型芯片是只能进行一次烧录的。但是如果在第一次烧录时,某一位为被烧为“1”,则该位可以再次被烧录成“0”;反之,如果已经被烧录成“0”了,则无法再次烧录成“1”。由此,有人发现了以下文章中介绍的这种多次烧录OTP芯片的方法。 在EMC单片机中,“ADD A,@0xFF”的机器码为全1。在下面这篇文章中,介绍的是用“ADD A,@0xFF”指令来预填,方便下次的改写。其实,还有更方便的办法: 文中提到的办法如下 ORG 0X000 ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF ADD A,@0XFF MAIN
[单片机]
基于AT89C51单片机设计的简易智能机器人
引言 随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能机器人。 1 设计思想与总体方案 1.1 简易智能机器人的设计思想 本机器人能在任意区域内沿引导线行走,自动绕障,在有光源引导的条件下能沿光源行走。同时,能检测埋在地下的金属片,发出声光指示信息,并能实时存储、显示检测到的断点数目以及各断点至起跑线
[单片机]
51单片机定时器和波特率
1.引言: 在串行通信中,收发双方发送或接收的数据速率要有一定的约定,我们通过软件对MCS-51串行口编程可以约定四种工作方式。其中,方式0和方式2的波特率时固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。 串行口的四种工作方式对应这三种波特率,由于输入的移位时钟的来源不同,所以各种方式的波特率的计算公式也不同。 2.各种方式的波特率介绍 工作方式0 方式0时,移位时钟脉冲由S6(即第6个状态周期,第12个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一,并不受 PCON寄存器中SMOD的影响,即: 方式0的波特率=fosc/12,fosc是系
[单片机]
51<font color='red'>单片机</font>定时器和波特率
89c51单片机和89s51单片机的区别,89s51单片机新增功能汇总
  AT89S51 是一个低功耗,高性能CMOS 8位 单片机 ,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统供给高性价比的解决方案。   AT89S51具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先
[单片机]

推荐帖子

【NUCLEO-L452RE测评】NUCLEO-L452RE快速入门之mbed的使用
首先感谢eeworld的支持,很荣幸兑换了一块STM32Nucleo-64board的板子,白色的板子很漂亮,很喜欢这样的风格。说到ST官方出的Nucleo板子,最早接触是14年,也是活动低价买了一块,当时连51都不熟,所以买回来也就吃灰了,后来那块板子就用来下载,说实话,Nucleo板子自带的st-link下载器真的很实用,还支持usb转串口,省去了开发时需要连接一大堆线的麻烦。因为实习的单位是做科技教育的,使用的平台是Arduino,相信很多人都有听说过,不过我也是去
11044755967 stm32/stm8
请教下在一对双绞线上同时传输电源的RS485信号的电路
TI有一篇文档描述了在一对双绞线上同时传输电源了RS485信号:http://www.ti.com/lit/ug/tidu993/tidu993.pdf,正好家里有传感器当时只留了电源线想用树莓派采集它的信号,试着用软件模拟了下。电路图如下:ZFG1模拟了RS485信号:输入频率为19200Hz的±5V方波型号R1是信号输出端:接到示波器BR4是24V输出端:接到示波器A这个电路能正常的分离24V电源和RS485信号,如下图(红线A通道,输出了24V,紫线B通道,RS485方波输出正
msmmbl 模拟电子
【报名中】RISC-V安全之地|Microchip 安全解决方案系列研讨会
MultiZone安全性是RISC-V的首个Linux安全之地。MultiZone演示将展示如何保护混合关键系统的确定性行为,其中Linux和实时系统在同一PolarFire器件中。对于需要在不受信任的平台上进行可信工作负荷的安全关键型应用,MultiZone安全性为多个安全区提供了由软件定义的硬件强制隔离,将数据、程序和外设完全隔离开。与传统厚重的管理者解决方案相比,MultiZone安全性是完全独立的。它呈现了一个极其有限的攻击面(2KB),可以进行正式验证,无
EEWORLD社区 嵌入式系统
TI DSP--cmd文件
cmd文件是使用TI芯片很重要的一步,了解它,能对整个软件系统的分布,对芯片本身资源的使用有一个更清晰的了解,从而达到优化系统的目的。CMD文件一句话来表达:定义芯片内部硬件资源和分配管理软件代码的一个配置文件。因此从cmd文件的组织上你能看到两个部分:1定义硬件资源,2管理软件代码(非原创,总结与网络)用户通过编写CMD文件,来管理、分配系统中的所有物理存储器和地址空间。CMD文件,全名连接命令文件(linkercommandfiles),以后缀.cmd结尾。CMD文件其实就是
Jacktang DSP 与 ARM 处理器
XILINX SPARTAN-6 FPGA SP601 评估套件限时销售
http://china.xilinx.com/products/devkits/EK-S6-SP601-G.htm销售价格249美元!提供业界信息,方便广大同仁XILINXSPARTAN-6FPGASP601评估套件限时销售顶!
eeleader FPGA/CPLD
【Follow me第二季第2期】任务汇总
UNOR4WIFI视频:【Followme第二季第2期】视频展示-EEWORLD大学堂代码:Follow_me第二季第二期代码-嵌入式开发相关资料下载-EEWORLD下载中心文档:【Followme第二季第2期】+搭建环境并开启第一步Blink/串口打印HelloEEWorld!-DigiKey得捷技术专区-电子工程世界-论坛【Followme第二季第2期】+LED矩阵、DAC、放大器、AD-DigiKey得捷技术专区-电子工程世
王嘉辉 DigiKey得捷技术专区
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved