当前位置:首页 > 单片机 > 单片机
[导读]嵌入式系统编程入门微控制器是如何启动的  为了保存编译号的二进制程序代码,大多数的现代微控制器都会包含片上flash存储器。有些微控制器还可能有一个独立的启动ROM,里面装有Bootloader程序。微控制器启动后,再

嵌入式系统编程入门微控制器是如何启动的

  为了保存编译号的二进制程序代码,大多数的现代微控制器都会包含片上flash存储器。有些微控制器还可能有一个独立的启动ROM,里面装有Bootloader程序。微控制器启动后,再执行flash的用户程序前,Bootloader会首先运行。

  在复位流程中,处理器会取出MSP的初始化值和复位向量,然后开始执行复位处理,这些信息都放在一个叫做启动代码的程序文件中。启动代码中的复位处理可能还会旅行初始化的职责,比如时钟控制电路和锁相环PLL的初始化。有些情况下,系统初始化的工作是放在C程序的main()函数中进行的。

  对于用C开发的应用程序,在进入主流程之前,启动代码已经开始执行,并且对应用程序用到的变量和内存等进行初始化。启动代码无需编程者担心,C开发工具会将其自动插入程序映像中。

  执行完C启动代码后,应用程序就开始执行了,应用程序通常包含下面几个部分:

硬件初始化(如时钟,PLL和外设)

应用程序的处理部分

中断服务程序

  另外,应用程序可能会用到C语言库,此时,C编译器/链接器会将所需要的库函数加入编译好的程序映像中。

  硬件初始化可能会涉及到一系列的外设、系统控制寄存器和中断控制器。如果在复位处理时没有进行处理,系统时钟控制和PLL此时也需要进行初始化。外设初始化完成后,程序就可以继续执行应用程序部分了。

嵌入式程序设计

  应用程序处理流程的实现方式如下:

轮询,如图4-4

中断驱动,如图4-5

轮询和中断组合使用,如图4-6

处理并发任务(操作系统),如图4-7

  对于复杂的应用程序,可以使用实时操作系统(RTOS)。RTOS将处理器时间划分为多个时间片,在有多个应用进程运行时,只有一个进程会获得时间片。使用RTOS,需要有定时器产生周期性的中断请求,当一个时间片的时间到时,RTOS的任务调度器会由定时器中断触发,调度器判断是否需要执行上下文切换。如果需要进行上下文切换,调度器会暂停当前执行的任务,并切换到下一个准备就绪的任务。


输入和输出

  在许多嵌入式系统中,输入或输出可能会局限与简单的电子接口,如uart、IO、LCD、SD卡等,这些接口由微控制器的外设控制。

  Cortex-M0的寄存器映射到了系统空间,并且它们还控制这外设,外设的典型初始化步骤如下:

配置时钟控制回路,使能外设的时钟信号,如果有必要的话,初始化相应的引脚。在许多低功耗控制器中,时钟信号被分为了多路,而且为了降低功耗,它们可以单独开关。大多数时钟信号默认都是关闭的,配置外设前需要使能相应的时钟。有些情况下,还可能需要使能外设总线系统的时钟。

配置IO口。大多数控制器的引脚都是复用的,需要对IO引脚进行相应的功能配置。

配置外设。大多数外设有自己的控制寄存器,为了确保外设工作正常,需要对寄存器进行配置。

配置中断。如果外设操作需要中断处理,需要配置中断控制器(NVIC)。


开发流程

  在嵌入式开发中,可以使用C、汇编、C和汇编混合编程。程序代码的生成流程如下图所示。

  C/汇编通过对应的编译器生成相应的目标文件,链接器脚本加载分散的目标文件生成可执行映像。

  混合编程的实现是因为C编译器提供了内联汇编器,以便在C程序文件中内联汇编代码。


C和汇编的选择


程序映像详解

  Cortex-M0的程序映像一般包括以下几部分:

向量表

C启动代码

程序代码(应用程序代码和数据)

C库代码(C库函数的程序代码,链接时插入)


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Cortex-M0 处理器简介  1. Cortex-M0 处理器基于冯诺依曼架构(单总线接口),使用32位精简指令集(RISC),该指令集被称为Thumb指令集。与之前相比,新的指令集增加了几条ARMv6架构的指令,并...

关键字: cortex-m0 技术综述

  Cortex-M0处理器为32位处理器,所以具有最大4G的寻址空间。在体系结构上,存储器空间被划分位一系列的区域,每个区域都有推荐的用途,以提高不同设备间的可移植性。  M0处理器内置了各种不见,例如NVIC和一些调

关键字: cortex-m0 体系结构 存储器系统

最近涉及到STM32F0XX的IAP,找了很多相关资料,感觉不是特别清楚,所以综合一些资料分享一下。刚开始做的时候以为很简单,在程序中写了个跳转函数(跳转到System Memory,并运行MCU自己的Bootloade...

关键字: cortex-m0 iap stm32f0xx

#include #define uchar unsigned char#define uint unsigned int//延时子程序void mDelay(uchar Delay){ uchar i; for(;...

关键字: C51 单片机 编程入门 跑马灯

LPC1114的中断,由中断控制模块NVIC控制。一共32个中断,每个中断的优先级可编程为 0~3 四种级别。级别越高对应的优先级越低。因此,级别0 是最高的中断优先级。设置中断优先级的函数,CMISIS已经写好,并嵌入...

关键字: cortex-m0 lpc1114 中断优先级

  异常会引起程序控制的变化。在异常发生时,处理器停止当前的任务,转而执行异常处理程序,异常处理完成后,会继续执行刚才的任务。异常分为很多种,中断是其中之一。Cortex-M0处理器最多支持32个外部中断(IRQ)

关键字: cortex-m0 体系结构 异常和中断

前言:最近由于开始设计无刷直流电机电子调速器,参考网上的一些资料,选用了Atmega8A-AU单片机作为主控芯片。该芯片采用8位结构,最高主频16MHz(内部振荡器则8MHz),可实现2.7V-5.5V供电,单个IO口最...

关键字: avr单片机 atmega8a 编程入门

  我们先来看看程序映像。    通常,Cortex-M0处理器的程序映像时从地址0x00000000处开始的。  程序映像开始处时向量表,其中包含了异常的其实地址(向量),每个中断向量的地址都等于“异常号*4”,比如,...

关键字: cortex-m0 体系结构 启动流程 程序映像

1.1 为什么要选择Cortex-M0  为了满足现代超低功耗微控制器和混合信号设备的需要,ARM推出了Cortex-M0处理器。Cortex-M0在保持低功耗,延长电池寿命的同时,还提高了运行效率。Cortex-M0优...

关键字: cortex-m0 绪论

1.引脚都有哪些功能该怎么看?看具体引脚有什么功能,看上面的引脚图即可,这个图可以在LPC1114用户手册的第9章“Pin Configuration”找到。2.默认的引脚功能是什么?大部分的引脚默认功能都是GPIO,个...

关键字: cortex-m0 lpc1114 切换引脚
关闭
关闭