0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机启动代码详解

MCU开发加油站 来源:未知 作者:胡薇 2018-06-13 15:20 次阅读

启动代码通常都烧写在flash中,它是系统一上电就执行的一段程序,它运行在任何用户c代码之前。上电后,arm处理器处于arm态,运行于管理模式,同时系统所有中断被禁止,pc到地址0处取指令执行。一个可执行映像文件必须有个入口点,而能放在rom起始处的映像文件的入口地址也必须设置为0。

汇编语言中,我们已经说过怎样定义一个程序的入口点,当工程中有多个入口点时,需要在连接器中使用-entry指出程序的入口点。如果用户创建的程序中,包含了main函数,则与c库初始化代码对应的也会有个入口点。

总的来说,启动代码主要完成两方面的工作,一是初始化执行环境,例如中断向量表、堆栈、i/o等;二是初始化c库和用户应用程序。

在第一阶段,启动代码的人物可以描述为:

(1)建立中断向量表;(2)初始化存储器;(3)初始化堆栈寄存器;(4)初始化i/o以及其他必要的设备;(5)根据需要改变处理器的状态。

建立中断向量表

初始化代码必须建立好中断向量表,以备应用程序后续使用。如果系统的地址0处是rom,则中断向量表直接是一些跳转指令就可以了,他们转到相应的中断处理函数执行。如果系统的0地址处不是rom,则中断向量表是通过动态的方式创建的,这主要是通过存储器映射的方式来实现:即上电后,rom中的地址被映射到地址0,它首先开始执行以便完成环境的初始化,最重要的它会将中断向量表拷贝到ram中,然后通过地址映射将ram地址映射为0,这样ram中的中断向量就可以使用了。

初始化存储系统

对于有mmu的处理器,需要正确初始化mmu,没有的只需正确初始化存储控制器,为每个bank配置正确的参数就可以了。

初始化堆栈指针

初始化代码必须初始化处理器各个模式下的堆栈指针,所有系统或用户程序会涉及的处理器模式对应的堆栈指针都应该初始化。通常未定义指令和预取指终止异常对应模式的堆栈指针不需要配置,除非用户需要使用它们作为调试使用。

初始化堆栈指针

初始化代码必须初始化处理器各种模式下的堆栈指针,所有系统或用户程序会涉及的处理器模式对应的堆栈指针都应该被初始化。通常未定义指令和预取指终止异常对应模式的堆栈指针不需要配置,除非用户需要使用它们作为调试使用。

初始化i/o以及其他必要设备

关键的输入输出模块必须在中断打开之前被配置,例如看门狗,否则它们会在系统启动后产生复位信号

改变处理器状态和模式

启动代码运行时,处理器状态认为管理模式,如果用户程序需要运行在用户模式,可以切换转入用户模式;所有处理器上电后是处于arm状态的,如果需要改变处理器状态,也可以在启动代码里切换到thumb态。

在执行环境建立起来后,接下来就是应用程序的初始化,简单点就是讲用户程序加载到他们相应的运行地址,初始化数据区等,这个阶段完成后,才能进入用户最终的c代码区域。用户应用程序的初始化过程包括:将rw段的数据拷贝到他们的运行地址处,同时在rw段后面初始化相应大小的zi段数据,把他们初始化为0,使用了库函数的程序(工程中有main函数)是在库函数_main中自动完成这些工作的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5998

    文章

    43963

    浏览量

    620691
  • 启动代码
    +关注

    关注

    0

    文章

    13

    浏览量

    9346

原文标题:单片机启动代码的认识

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机程序架构详解

    本帖最后由 eehome 于 2013-1-5 09:44 编辑 单片机程序架构详解
    发表于 08-17 15:55

    单片机C程序应用实例详解

    单片机C程序应用实例详解
    发表于 08-18 19:23

    单片机按键详解

    单片机按键详解
    发表于 07-28 14:51

    单片机启动代码

    带你来看看单片机启动代码
    发表于 05-26 12:45

    STC单片机下载代码的步骤

    STC单片机是最常用的单片机之一;下载代码需要7步进行第一步:硬件连接好后,打开stc-isp-15xx-v6.86.exe;第二步:选择单片机型号;如果
    发表于 11-18 07:24

    单片机启动代码干了些什么工作,为何需要它?

    。。。扯远了!其实电脑本身就是从单片机而来,那么单片机也是有启动代码的,只是我们绝大部分情况不去关心它。启动
    发表于 11-22 07:40

    51单片机中断详解

    单片机_中断理解51单片机中断详解(上)51单片机中断详解(中)51单片机中断
    发表于 11-22 06:08

    单片机是如何启动

    单片机启动过程是加电后,先运行芯片内部固有程序(这个程序是用户访问不到也改写不了的),即启动代码启动
    发表于 11-25 09:26

    单片机P3口输入,P1口输出代码详解

    单片机】P3口输入,P1口输出代码详解(方法一)代码详解(方法二)代码
    发表于 11-25 09:00

    数码管应用及其代码详解简述

    单片机】数码管应用一、操作目的二、代码详解(简单应用)三、代码详解(60进制)一、操作目的(1)简单的数码管应用。(2)60进制操作练习。
    发表于 11-25 08:50

    单片机点灯的基本语法代码详解

    单片机】点灯基本语法代码详解代码详解#include #include //功能:实现P1口左移#define uchar unsigne
    发表于 02-16 06:34

    8255单片机控制交通灯代码详解

    单片机】8255控制交通灯代码详解代码详解#include #include #include #define uchar unsigne
    发表于 02-16 07:45

    单片机启动代码详细资料说明

    对于熟悉电脑的伙伴们来说,BIOS(那个蓝色的界面)可能不会太陌生吧,这货就是电脑的启动代码。没有BIOS的电脑,那注定是一块板砖!BIOS主要是做一些开机前的准备工作,例如系统时间设定、启动顺序。。。扯远了!其实电脑本身就是从
    发表于 07-29 17:36 0次下载
    <b class='flag-5'>单片机</b>的<b class='flag-5'>启动</b><b class='flag-5'>代码</b>详细资料说明

    单片机启动代码

    。。。扯远了!其实电脑本身就是从单片机而来,那么单片机也是有启动代码的,只是我们绝大部分情况不去关心它。启动
    发表于 11-13 16:06 30次下载
    <b class='flag-5'>单片机</b>的<b class='flag-5'>启动</b><b class='flag-5'>代码</b>

    【IAR下的汇编】IAR下的汇编/单片机启动代码汇编

    【IAR下的汇编】IAR下的汇编/单片机启动代码汇编
    发表于 12-03 10:21 12次下载
    【IAR下的汇编】IAR下的汇编/<b class='flag-5'>单片机</b><b class='flag-5'>启动</b><b class='flag-5'>代码</b>汇编