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中自动完成这些工作的。

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

    关注

    6068

    文章

    45037

    浏览量

    652431
  • 启动代码
    +关注

    关注

    0

    文章

    13

    浏览量

    9492

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机复位和冷启动详细介绍

    单片机启动很简单,关电,再上电,正常复位后,就冷启动成功。单片机启动其实是一个技术术语,是指单片机
    的头像 发表于 02-12 13:38 ?2.1w次阅读
    <b class='flag-5'>单片机</b>复位和冷<b class='flag-5'>启动</b>详细介绍

    单片机启动代码

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

    51单片机中断详解

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

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

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

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

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

    ARM单片机启动代码研究

    摘要:在32位ARM核单片机嵌入式系统的开发中,为了保证系统能正常独立运行,用户必须编写自己的启动程序。以飞利浦公司的LPC2210单片机为例,在ADSl.2集成开发环境中,介绍了启
    发表于 09-11 10:11 ?42次下载

    MSP430单片机原理与应用实例详解

    MSP430单片机原理与应用实例详解.pdf
    发表于 12-16 15:43 ?15次下载

    51单片机中断编程实例详解

    51单片机中断编程实例详解.pdf
    发表于 12-16 15:42 ?17次下载

    光电测速(521单片机)L298N电子设计源代码免费下载

    光电测速-521单片机-L298N电子设计源代码详解
    发表于 09-01 10:41 ?23次下载

    单片机教程之给初学单片机的40个实验详解包括原理图和程序

    本文档的主要内容详细介绍的是单片机教程之给初学单片机的40个实验详解
    发表于 10-10 08:00 ?34次下载
    <b class='flag-5'>单片机</b>教程之给初学<b class='flag-5'>单片机</b>的40个实验<b class='flag-5'>详解</b>包括原理图和程序

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

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

    51单片机启动代码究竟里面写了什么

    在我们使用kei c51创建一个51单片机项目时,会有如下图所示的提示: ? keil创建新项目时,提示是否添加启动文件 ? 一般情况下,需要选择“是”。当然,也可以选择不加。那么,这个启动文件
    的头像 发表于 09-22 10:15 ?2410次阅读
    51<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>

    新唐单片机代码评审总结

    昨晚上,我们一个同事组织了一个小会议,大家一起讨论了一个项目的单片机代码,这个单片机用的是新唐单片机,期间大家也讨论了一些问题,总结一下,希望对写
    发表于 12-01 16:06 ?15次下载
    新唐<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>汇编