《Cortex-M0权威指南》之Cortex-M0编程入门

转载请注明来源:cuixiaolei的技术博客


嵌入式系统编程入门

微控制器是如何启动的

  为了保存编译号的二进制程序代码,大多数的现代微控制器都会包含片上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的寄存器映射到了系统空间,并且它们还控制这外设,外设的典型初始化步骤如下:

  1. 配置时钟控制回路,使能外设的时钟信号,如果有必要的话,初始化相应的引脚。在许多低功耗控制器中,时钟信号被分为了多路,而且为了降低功耗,它们可以单独开关。大多数时钟信号默认都是关闭的,配置外设前需要使能相应的时钟。有些情况下,还可能需要使能外设总线系统的时钟。
  2. 配置IO口。大多数控制器的引脚都是复用的,需要对IO引脚进行相应的功能配置。
  3. 配置外设。大多数外设有自己的控制寄存器,为了确保外设工作正常,需要对寄存器进行配置。
  4. 配置中断。如果外设操作需要中断处理,需要配置中断控制器(NVIC)。

开发流程

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

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

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


C和汇编的选择


程序映像详解

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

  • 向量表
  • C启动代码
  • 程序代码(应用程序代码和数据)
  • C库代码(C库函数的程序代码,链接时插入)

向量表

《Cortex-M0权威指南》之Cortex-M0编程入门相关推荐

  1. ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带

    ARM  Cortex  M0权威指南_PDF电子书下载 带书签目录 高清完整版   http://pan.baidu.com/s/1jGKQSwY   MariaDB入门很简单_PDF电子书下载 带 ...

  2. 《Hadoop权威指南》读书笔记——MapeReduce入门

    1 MR的原理 MapeReduce(简称MR)的是大数据计算引擎,相对于Linux awk等工具而已,最大的优势是可以分布式执行,充分利用计算机的多核性能. 一个MR作业(job)是客户端需要执行的 ...

  3. CUDA C编程权威指南 第二章 CUDA编程模型

    CUDA6.0开始 有"统一寻址"(Unified Memory)编程模型,可以用单个指针访问CPU和GPU内存,无须手动拷贝 主机启动内核后,管理权立刻返回给主机(类似启动线程后 ...

  4. JavaScript权威指南--多媒体和图形编程

    知识要点 21.1节介绍如何用传统的JavaScript技术实现诸如图片翻转(鼠标指针移动到一张静态图片上切换成另外一张图片)这样的视觉效果. 21.2节介绍HTML5的<audio>和& ...

  5. netty权威指南学习笔记一——NIO入门(4)AIO

    NIO2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现.异步通道提供以下两种方式获取操作结果. 1.通过java.util.concurrent.Future 类来表示异步操 ...

  6. 【sqlite权威指南】笔记3 sqlite入门

    CLP使用 转载于:https://www.cnblogs.com/wygyxrssxz/p/4522600.html

  7. python编程入门指南-《中小学生Python编程入门指南》3.4 字典

    3.3 字典 字典的表达形式是这样的: d = {key1 : value1, key2 : value2 } 整个字典先是一对花括号{}包起来,内部是一对对的键值对(键值都成对了,就你还单身),每个 ...

  8. python编程入门指南-《中小学生Python编程入门指南》附录二

    附录二是补充一些历史,补充计算机发展的历史常识,当故事来看吧. 1.冯·诺伊曼和第一台计算机 约翰·冯·诺伊曼,被后人称为"计算机之父",可见对计算机的诞生和发展起了决定性的作用, ...

  9. Netty权威指南(四)TCP粘包/拆包问题

    TCP粘包/拆包问题解决之道 上一章 一.介绍 1.1 TCP粘包/拆包问题说明 1.2 TCP粘包/拆包发生的原因 1.3 粘包问题的解决策略 二.未考虑TCP粘包导致的功能异常案例 2.1 Tim ...

最新文章

  1. 点分十进制IP校验、转换,掩码校验
  2. python判断路径是文件还是文件夹_python之判断是否是目录或文件
  3. python四个带 key 参数的函数(max、min、map、filter)
  4. 在那天的雪停息之前β
  5. jpeg6 安装问题!
  6. Java基础IO流(五)RandomAccessFile
  7. Docker 环境:Nexus3.x 的私有仓库
  8. Cloud一分钟 | 北京13部门召开座谈会,要求阿里京东等平台规范开展双11促销活动...
  9. linux 关闭防火墙 centos7,centos7关闭防火墙和selinux
  10. mysql中int 5_mysql中int(x)与int以及varchar与char的区别_HelloWorld_ty的博客-CSDN博客
  11. 动物统计 nyoj286
  12. lammps教程:以Cu纳米磨削为例详解region命令
  13. 三维叉乘怎么算_奇技淫巧系列:向量叉乘
  14. golang源代码阅读,sync系列-WaitGroup
  15. 视频格式与编码压缩标准 mpeg4,H.264.H.265 有什么关系?
  16. 双系统蓝牙键盘的共享配对解决办法的简要步骤:win + arch~IRK、LTK、ERand、EDIV
  17. 数学建模-回归分析(Stata)
  18. Typora编辑MD文档图片失效的问题解决
  19. 【前端三分钟】锚点自动跟随滚动定位
  20. 第三周.02.HAN算法详解

热门文章

  1. Netty与mina的比较
  2. 分页——SQL Server 对比 MySQL
  3. 我的学习之路_第十七章_JavaUtils
  4. 初学网站建设,要学习些什么?
  5. 一切都是对象,一切都是指针,一切都是东西(python的编程哲学)
  6. JAVA验证数字的正则表达式,来一发
  7. Google+强推实名制引爆不满 用户增速放缓
  8. 带参数标签的取值方法
  9. (转)shiro权限框架详解06-shiro与web项目整合(下)
  10. Java性能调优:利用VisualVM进行性能分析