精华内容
下载资源
问答
  • MCU和SOC启动过程对比

    2020-12-04 14:05:35
    启动过程:电源->Bootloader(引导操作系统启动)->Linux内核->文件系统(根据功能划分,如div中是硬件,home是工作目录,带访问权限) x86 Intel 如winsows OS 启动过程:电源 ->BIOS-》windows内核-》C...

    SOC

    嵌入式SOC

    如arm、aarch64等
    嵌入式产品:树莓派,mini2440、mini6410、nanopi,海思、高通、RK(瑞芯微)->KTV点歌机、人脸识别打卡器、智能家居主控

    启动过程:电源->Bootloader(引导操作系统启动)->Linux内核->文件系统(根据功能划分,如div中是硬件,home是工作目录,带访问权限)

    x86

    Intel
    如winsows OS
    启动过程:电源 ->BIOS-》windows内核-》C、D盘->程序启动(如QQ)

    安卓

    启动过程:电源->fastBoot/Bootloader->Linux内核->文件系统->虚拟机->HOME应用程序->点某图标打开某app

    MCU

    C51,STM32(裸机)------C直接操控底层寄存器实现相关业务

    32和51都是业务流程型的裸机代码
    Bootloader:
    一阶段:让CPU和内存、FLASH、串口、IIC、IIS、数据段打交道,驱动这些设备(汇编和C结合)
    二阶段:引导Linux内核启动(纯C)

    展开全文
  • MCU上电启动应用程序前的工作

    千次阅读 2018-03-15 20:04:52
      MCU整体工作流程可总结如下:上电——>主时钟起振——>启动代码——>用户程序(main函数)。对于我们应用开发来说,大部分工作重点是在应用程序编写这块。特别是高级MCU的出现,...

      MCU整体工作流程可总结如下:上电——>主时钟起振——>启动代码——>用户程序(main函数)。对于我们应用开发来说,大部分工作重点是在应用程序编写这块。特别是高级MCU的出现,如ARM系列的STM32、LPC等32位MCU,以及芯片原厂的完善底层代码,启动代码已经固化在芯片内部flash(称为BootLoader),或者已经提供完整的汇编启动源码。因此,启动过程这块,我们比较陌生,但基本的原理还需了解,不排除面试或者使用到实时系统(RTOS)时需要修改启动汇编代码。
      MCU上电(复位)时,从固定的地址启动,一般是地址0x00000000,如ARM7;个别特殊的如STM32默认启动地址为0x8000000(flash区启动)。启动过程主要完成两部分工作,一个是硬件执行环境,如中断向量表、寄存器、看门狗等,另一个是软件环境,如C库环境、ZI(未初始化的内存变量)等。

    一.硬件环境工作

    1.初始时钟
      初始化内核时钟,主时钟,各个外设的时钟。

    2.关闭看门狗
      看门狗是用来监控应用程序的异常跑飞而复位CPU,在初始化阶段,由于没有“喂狗”这一动作,有可能导致CPU不断复位,因此,首先会关闭看门狗,初始化完,再开启。

    3.建立中断向量表
      中断向量表,中断源的识别标志,可用来形成相应的中断服务程序的入口地址,或者中断服务程序入口地址的偏移量和段基值。CPU利用中断向量表转入中断服务程序处理相关事务。

    4.初始化堆栈寄存器
      堆栈的作用一个就是保存现场(上下文),如函数调用或者中断发送时,将当前执行地址压栈,调用完成再返回此处执行程序。另一个作用就是保存参数,如临时变量。因此,在启动阶段需初始化堆栈寄存器、堆栈的大小、起始地址等。

    5.内存初始化
      选择内部或者外部RAM。

    二.软件环境工作
    1.把RO,RW从它们的加载域复制到它们的运行域中去

    2.初始化(清零)ZI域。

    3.初始化堆栈指针

    4.初始化C库环境
      包括C库所需的内存空间、程序执行所需资源、C库初始化。

    三.Cortex M3启动
    CortexM3有3种启动方式
    1、 BOOT1=1 BOOT0=1 ,中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处。
    2、 BOOT1=x BOOT0=0,中断向量表定位于FLASH区,即起始地址为0x8000000,同时复位后PC指针位于0x8000000处。
    3、 BOOT1=0 BOOT0=1 ,中断向量表定位于内置Bootloader区,此时可通过串口下载程序的二进制文件到flash区。

      而Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。即是对于flash启动来说(正常工作也是flash启动),0x8000000地址存放的是栈顶地址__initial_sp,0x8000004地址存放的是复位中断向量Reset_Handler入口地址(STM32使用32位总线,存储空间为4字节对齐);在编写多段程序时,偏移地址空间需注意,如编写一个BootLoader,从BootLoader到应用程序段的相互跳转。

    参考
    [1] http://blog.csdn.net/whiteshark1991/article/details/6635296

    展开全文
  • 详解 STM32的上电启动过程

    千次阅读 多人点赞 2019-12-30 23:07:29
    我们正常在操作一款单片机的时候,都是从main函数开始进行编程的,但是单片机上电是从main函数开始执行的吗?答案当然是否定的,在main函数之前单片机最先执行的是硬件设置SP、PC然后是“启动文件”,一般主要是项目...

    先说启动文件

    我们正常在操作一款单片机的时候,都是从main函数开始进行编程的,但是单片机上电是从main函数开始执行的吗?答案当然是否定的,在main函数之前单片机最先执行的是硬件设置SP、PC然后是“启动文件”,一般主要是项目文件里面的startup_xxxxx.s文件。其实这个就是我们常说的Bootloader。

    其实不光STM32系列单片机是这样,我们接触的NXP的微控制器、TI的MSP430以及51单片机等等其实都是有上述的启动文件的。启动文件负责的就是从单片机复位开始到main函数之前这段时间所需要进行的工作。我们一般很少接触启动文件的主要原因是开发环境往往给开发者自动的提供了这个启动文件,不需要我们再去操心,直接从main函数开始进行设计就可以了。

    STM32三种启动方式

    接触过STM32系列单片机的朋友应该知道STM32有三种启动模式,用户可以通过设置BOOT0和BOOT1的引脚电平状态,来选择复位后的启动模式。

    需要注意的是STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式只是将各自存储空间的地址映射到0x00000000中。

    1. 从Flash启动,将Flash地址0x08000000映射到0x00000000,这样启动以后就相当于从0x08000000开始的,这是我们最常用的模式;
    2. 从SRAM启动,将SRAM地址0x20000000映射到0x00000000,这样启动以后就相当于从0x20000000开始的,用于调试,笔者基本没用过;
    3. 从系统存储器启动(可以看上篇文章里的内存映射图,System memory),将系统存储器地址0x1FFFF000映射到0x00000000,这样启动以后就相当于从0x1FFFF000开始执行的,值得注意的是这个系统存储器里面存储的其实是STM32自带的Bootloader代码,这其实是一个官方的IAP,它提供了可以通过UART1接口将用户的代码下载到Flash中的功能,下载完以后再切换到从Flash中启动就可以正常运行了。打个比方这个官方的Bootloader就相当于我们玩路由器时的“不死breed”。笔者之前在调STM32低功耗的时候将下载口给复用了其他功能导致“变砖”,就是通过这种方式恢复的

    在这里插入图片描述

    切回正题

    下面我们来具体看一下从用户的Flash启动STM32,从上电到main函数之间的这段时间都做了什么。

    1. 第一步是硬件设置SP、PC
      我们参考《Cortex-M3权威指南》向量表章节表7.6,如下图所示:

    在这里插入图片描述
    前两段地址主要是用来指定SP和PC的初值,上一节我们已经知道了映射关系,所以这时已自动从0x08000000位置处读取数据赋值给了栈指针SP,从0x08000004位置处读取数据赋值给了PC。需要注意的是这个复位向量初始值并不是固定的,可以通过一个叫“向量表偏移量寄存器”来修改定位。

    在这里插入图片描述
    下图是我们那个开源OLED时钟项目的HEX文件,用J-Flash打开就可以看到设置完的SP=0x20005B88,PC=0x0800282D。

    在这里插入图片描述

    1. 第二步是设置系统时钟
      我们接着来追踪系统的运行轨迹,上面我们已经知道了PC的地址为0x0800282D,但是这没有遵循4字节对齐,我们将其对齐为0x0800282C,这时我们打开项目文件里面的.map文件,找到这个地址,如下图示:

    在这里插入图片描述
    我们发现来到了第一节说的startup_xxxxx.s文件,我们打开startup文件找到:

    在这里插入图片描述
    我们发现运行到了SystemInit,C的世界我们就不陌生了,在项目文件的system_stm32f10x.c里面可以找到SystemInit函数,也就是初始化系统时钟了。

    1. 第三步是___main
      到这里大家可能会以为已经到了main函数了,其实不是这样的。___main和main是不一样的,我们寻找这个___main会发现找不到,startup文件里面没有,map文件里面也没有。其实它是在MDK自带的库里面了,主要的功能是软件设置SP、加载.data.bss并初始化栈区。由于需要在线跟踪才能看到,我在这里就不给大家列出来了,感兴趣的朋友可以深入研究一下。

    2. 最后来到C的世界
      在执行到___main的最后就跳转到了C文件的main函数了。

    最后用一张图来整体看一下流程:

    在这里插入图片描述

    总 结

    到这里STM32的存储器以及上电启动过程就完整的总结完了,希望对大家有所帮助,大家如果感兴趣可以在调试STM32的时候一步一步的来跟踪一下看看,每一款单片机的启动文件其实都是很值得玩味的,对我们系统的来体会控制器的架构、指令集、中断向量等内容是很有帮助的。大家如果将启动过程了解清楚了对我们后面来进行IAP等有意思的操作是很有帮助的。

    展开全文
  • BootLoader与MCU启动过程

    2020-11-19 14:18:13
    ARM之Cortex M3的启动过程 目前,多数MCU厂商都提供一个启动文件。当然,编程者也可以自己编写启动文件,具体编写要求ARM的网站都有相关文档进行说明。下面分析一下STM32启动文件startup_stm32f407xx.s STM32...

    STM32那点事(1)_STM32F40_41xx启动文件详解

    STM32 官方为广大开发者提供一套统一开发固件,主要是屏蔽寄存器封装,提供初始化等功能,较少开发者负担。只需要调用相关模块封装,对相关结构提初始化即可,较少开发调试时间。 

    ARM之Cortex M3的启动过程

    目前,多数MCU厂商都提供一个启动文件。当然,编程者也可以自己编写启动文件,具体编写要求ARM的网站上都有相关文档进行说明。下面分析一下STM32启动文件startup_stm32f407xx.s 

    STM32F0单片机快速入门三 MCU启动过程               这篇可以好好看看,来龙去脉讲得比较清楚

    最初芯片内是不能存储代码的,需要外挂EPROM,就是下面这种带个小玻璃窗的存储器。擦除 EPROM 中的代码需要用紫外线照射几分钟才行。

    后来出现了 Flash 这种可电擦写的存储器,并集成在了单片机内部。

    后来,有芯片厂商把这种代码在出厂时就固化在芯片里,极大的方便了代码下载和程序更新。STM32F030内部就固化了Bootloader。当我们把一个引脚 BOOT0 拉高的同时,重新给芯片上电或复位,就会触发Boootloader进入运行。此时我们通过单片机的串口就可以把新程序发送给单片机,发送完后把 BOOT0 拉低,再复位单片机,新程序就会运行起来。

    Startup Code 可以译为启动代码。单片机上电或复位后最先执行的一段代码。一般主要会完成堆栈指针的设置,复位向量的获取和加载,然后初始化变量,最后跳转到用户代码。在详细看启动代码之前,我们先看一下 STM32F030 的内存映射。

     STM32(一)之启动文件简介

     本文以STM32F103为例,介绍STM32的启动文件。

            一般而言,系统上电后第一个执行的是由汇编所编写的启动文件,其主要工作为一下五部分:

          (1)、初始化堆栈指针SP=_initial_sp

          (2)、初始化PC指针,令其=Reset_Handler

          (3)、初始化中断向量表

          (4)、配置系统时钟

          (5)、调用C库函数_main初始化用户堆栈,从而最终调用main函数进入C的世界

             这上述的五个功能一般都由STM32官方在它们提供的官方库里的ASM文件(汇编启动文件)startup_stm32f10x_hd.s实现,因此在实际中只需要根据所用编译软件的不同选择对应的ASM文件,然后将之加入编译的工程中,再编写自己的main文件便可,而系统时钟已在ASM文件中设为72M,以及向量表已经设置完成(向量表的介绍在别的文章里介绍)。

    kEIL5环境下移置STM32库文件            打开Keil5新建工程,Project-New Project,并在新工程目录下新建5个文件夹,STARTUP、CMSSIS、FWLIB、USER、DOC;

    启动文件、库文件是和自己写的c文件一起编译之后,一块烧到flash里面的。

    库函数也是用到什么外设的库,才把它的库文件加入工程中。

    展开全文
  • STM32F0单片机快速入门三 MCU启动过程

    千次阅读 2020-02-07 17:36:37
    1.MCU 代码如何启动 首先我们需要澄清一个问题,什么是 Startup Code,什么是 Bootloader?因为总看到有同学混用这两个概念。 Bootloader 可以译为引导程序。早期的单片机是没有 Bootloader 这种概念的。如大家...
  • 1. S32K1xx系列MCU启动过程详解(startup_S32K144.S) ① 关闭CPU全局中断 ②清零CPU内核寄存器R1~R12 ③初始化SRAM的ECC ④初始化堆栈 ⑤系统初始化 ⑥RAM初始化 ⑦打开CPU全局中断 ⑧跳转到应用程序main(...
  • 仍在连接中, 请给 MCU 上电

    千次阅读 2017-03-19 16:01:39
    第一次烧写软件的时候,遇到个问题,烧写软件提示:“仍在连接中, 请给 MCU 上电”,然后就不动了: 芯片用的是STC12C4052AD。 书说是要给单片机“重新上电”,那啥意思呢?我试着拔了UART重接,没用,也试...
  • 8051 MCU学习之分析单片机的启动过程

    千次阅读 2017-03-15 17:50:48
    接触单片机有几年的时间了,一直专注于如何在单片机写一些应用,对单片机如何启动的知之甚少,惭愧惭愧。。。今天得空整理了一下,加深了对单片机的认识,如为什么定义data区里的变量重新开机的初始值为0。单片机...
  • STM32 上电后的启动过程

    千次阅读 2020-07-21 10:26:49
    微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,这样一来main函数的...
  • 现在的处理器内核基本都是arm公司设计的,主要分为三种: context-A系列(属于应用处理器内核,主频很高,1Ghz左右(即每秒可以计算1亿次),运算性能很强,多核,但是中断响应慢毫秒级别...
  • MCU启动代码

    千次阅读 2018-06-11 18:20:10
    启动代码通常都烧写在flash中,它是系统一上电就执行的一段程序,它运行在任何用户c代码之前。上电后,arm处理器处于arm态,运行于管理模式,同时系统所有中断被禁止,pc到地址0处取指令执行。一个可执行映像文件...
  • NXP MCU Boot Utility English | 中文 对于MCUBootUtility,RT-Flash工具,有任何使用的问题,可以... NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP MCU里BootROM功能相对应,目...
  • 单片机的启动过程(从上电到main)

    万次阅读 2017-08-03 20:16:43
    上电后,程序跳转到0x00000004地址运行,此地址存储的就是复位中断。 Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP ...
  • 很多嵌入式软件工程师会好奇程序是怎么从MCU复位跑到...MCU初始化过程指的是从MCU复位到main()函数之前的过程。一般来说,MCU初始化过程包括如下几个阶段: 1. 硬件初始化 硬件初始化指的是硬件必须先准备好(比如初
  •  nxpSecBoot是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP MCU里BootROM功能相对应,目前主要支持i.MXRT系列MCU芯片,与NXP官方提供的标准安全加密配套工具集(OpenSSL, CST, sdphost, blh...
  • 前言 在笔者的一篇文章中《中断...上电复位,也就是我们给我们的 MCU 通电后,其实也是一次复位的过程。 外部产生的手动复位信号,这个也比较常见,我们在平时学习所使用的开发板中就存在一个复位的按键,来实现手动
  • 说明: 以下介绍示例的MCU地址空间如下: ROM空间为:0x0000 0000 – 0x0000 8000 ...一、MCU上电后,硬件设计保证,自动从地址0x00开始取数据 初始化文件中代码设置 如下: 第一个数据用于初...
  • 启动方式 这是三星MCU的一种启动方式,s3c2440的MMU有一种... 1、系统上电后,首先自动判断是否是autoboot模式,如果使用 s3c2410是带有nandflash的,并切被设置成autoboot,从nandflash开始启动.  2、在判断是aut
  • 单片机的启动过程

    2020-08-23 23:32:44
    单片机的启动过程是加后,先运行芯片内部固有程序(这个程序是用户访问不到也改写不了的),即启动代码。启动代码程序建立完运行环境后,会去读串口状态,就是用户下载程序用到的各个端口,判断用户是否正在使用...
  • 2. 部分板子MCU冷(-35°~-10°)启动失效,未开狗一直起不来,开了狗会复位,常温启动之后降温,板子正常运行。 3. 部分板子MCU常温启动也失效,未开狗一直起不来,开了狗会复位。 4. 更换SPI FLASH,常温及-35°...
  • 大容量的电容虽然能延时系统掉,使得系统在电源意外关闭时MCU能继续完成相应操作,而如果此时重新上电,却经常遇到系统无法启动的问题。那么这到底是怎么回事呢?遇到这种情况又该如何处理呢?本文教您一招解决它...
  • MCU基础

    2021-09-02 14:43:42
    MCU1,定义及分类2,运行及处理过程 1,定义及分类 MCU(Micro Control Unit),中文为微控制单元,又称单片微型计算机(Single Chip Microcomputer)或者单片机,是指将计算机的CPU、RAM、ROM、定时计数器和多种I/O...
  • 单片机是微控制器,也就是MCU(例如51、cortex-M系列的单片机都处于MCU) 像ARM9、ARM11、A8、A9就不是MCU,而是MPU,也就是微处理器 也就是说单片机属于微控制器,高端的ARM属于微处理器 2、MCU和MPU到底有什么区别?...
  • 【重写】简析stm32启动过程

    千次阅读 多人点赞 2018-06-01 20:48:09
    无论性能高下,结构简繁,价格贵贱,每一种微控制器(处理器)都必须有启动文件,启动文件的作用便是负责执行微控制器从“复位”到“开始执行main函数”中间这段时间(称为启动过程)所必须进行的工作。最为常见的51...
  • AliOS Things的启动过程分析(二)

    千次阅读 2018-10-13 13:13:24
    在AliOS Things的启动过程分析(一)中分析了developerkit从系统上电到调用main函数所经历的一些步骤,接下来详细分析一下main函数的一些工作,主要是内核的相关初始化工作。main函数所处的位置位于 platform\mcu\...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,569
精华内容 1,827
关键字:

mcu上电启动过程