韦东山FreeRTOS ARM架构简明教程

【3-2-1/2】ARM架构简明教程


前言

本节简单讲解一下ARM架构

一、ARM架构

1.1 RISC

ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点:

     1、对内存只有读写指令

     2、对数据的运算是在CPU内部实现

     3、使用RISC指令的CPU复杂度小一点,易于设计

首先,我们看一下上一节我们是怎么编写的程序,我们去创建一个任务的时候,为什么要指定栈?

在这里的128会去指定栈的大小,这里的xTaskCreate函数会去分配栈,理解栈之后,才能深入理解RTOS的本质,要想去理解栈,又得对处理器的架构有所了解。

如果你组装过电脑的话,会组装一个主板,然后去买CPU,把CPU插到主板上去,然后还会去买内存条,把内存条也插到主板上去。然后还会去买硬盘,通过各种接线接上去。对于我们的一台电脑,这些主板,CPU,内存条,硬盘等,它们是离散的,他们通过主板来组装到一起,

那么对于我们的单片机来说,它被称为SOC,System On Chip,在一个芯片上具有一个比较完整的或者称为相对完整的系统。

就比如说这是我们的一款ARM芯片,里面就已经集成了CPU,内存,类比于电脑上的硬盘,在单片机中这是Flash,Flash上面用来保存我们的程序,CPU用来运行程序,程序运行的过程中会用到内存,这个内存有什么功能呢?

注意了,内存没有计算功能。我们访问内存的时候,要么把数据写进去,要么把数据读出来,所有的计算都是在CPU内部执行的。就比如说

上图所示,CPU对内存只有读和写两条指令,对于数据的运算是在CPU内部执行的,使用精简指令集,这个CPU的复杂度小一点,易于设计。上图所示为a =  a*b  在内存和CPU之间的操作步骤,共有4步

1.2 提出问题

那么你要把a的值从内存中读入CPU,那CPU里面就有保存这个值的位置呀,CPU里面用什么来保存变量a的值呢?另外CPU里面用什么来保存b的值?CPU里面用什么来保存a*b这个计算之后的新值呢?咱们又得深入看看CPU的内部结构

1.3 CPU内部寄存器

无论是cortex-M3/M4,还是M7

CPU内部都有R0,R1,......,R15寄存器;它们可以用来“暂存”数据

对于R13、R14、R15,还另有用途

R13:别名SP(Stack Pointer),栈指针

R14:别名LR(Link Register),用来保存返回地址

R15:别名PC(Program Counter),程序计数器,表示当前指令地址,写入新值即可跳转

当我们要计算a = a +1 b 时,会涉及到4条汇编指令,汇编指令就是我们所谓的程序嘛,这些程序存在Flash上(上图右下角的代码)     a 和 b 的具体数值保存在内存里(上图右上角的数据)。CPU(上图左边)从Flash得到指令然后执行。

就比如说CPU得到了第一条汇编指令 LDR  R0,[a]  这条指令要求CPU去读取变量a ,把内存上变量a的值读入CPU 保存在哪里?这条指令是将变量a的值保存到R0里面,在下一条指令里,把变量b的值保存进R1  ,然后计算的时候把新值继续保存进R0  ,最后一条指令,把R0的值写入内存中去

我们现在知道了CPU内部有计算单元ALU,这个计算呢需要用到寄存器,这些寄存器的值哪来的?你可以去执行读内存的指令,把内存里面的值读进寄存器里面来。咱们现在重点说的是,在CPU内部有寄存器,寄存器可以起一些保存的作用。

这些寄存器除了起到保存的作用之外,有一些寄存器它还有特殊的功能,

R13一般来说用来保存栈的地址,R14一般来说用来保存返回地址(就比如说函数A()里面有函数B(),调

  • 24
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1.1 课程内容嵌入式软件工程师的学习路线一般是:单片机、RTOS、Linux。当你掌握单片机开发后,如果要进一步提升编程水平,建议学习RTOS(Real Time Operating System,实时操作系统)。有很多优秀的RTOS,比如FreeRTOS、RT-Thread、UCOS等等。FreeRTOS使用范围最广泛,RT-Thread生态丰富,UCOS是收费的并且很少使用了。对于初学者,建议先学习FreeRTOS。只要学会了任意一款RTOS,肯定就会使用其他RTOS了。我们在2022年已经推出了“FreeRTOS快速入门”课程。为何还要重新制作“FreeRTOS入门与工程实践”?“FreeRTOS快速入门”只是讲解FreeRTOS的各类API的理论、用法、示例,这些实验是基于Keil自带的STM32F103模拟器。没有使用更多的硬件模块、不能体现工作中的实际场景。在“FreeRTOS入门与工程实践”,将引入更多的硬件模块,并展示实际工程示例中的用法。另外,基于RTOS的程序一般都比较复杂,涉及的源文件非常多,在工作中一般都基于“面向对象”的思想来写程序。所以,本课程会涉及如下内容:讲解FreeRTOS的常用API:理论、用法选择合适的硬件模块,展示这些API的实例实现合适的小项目,展示工作中的编程方法1.2 讲课方式对于每一个实验,我们会精心设计:要解决什么问题;然后讲解FreeRTOS提供的解决方法。讲解FreeRTOS的API及内部原理(不深入讲解内部源码,只是进行原理性介绍)讲解实验过程使用的模块的接口函数(只讲使用,不讲内部实现,模块的源码实现单独开课讲解)讲解原理时,配合着文档、现场画图进行讲解,跟学校老师写黑板一样最后现场从0编写程序并调试一切都是现场操作,绝对不会照着PPT念,绝对不会照着现成的代码讲解。只有现场从0操作,学员才能身临其境地学习,跟着教程:碰到问题、解决问题。1.3 硬件平台本课程基于DshanMCU-103开发套件进行开发,它由3部分组成:STM32F103C8T6的最小系统板、扩展底板、各类模块。如下图所示:  上述硬件再加一个ST-Link即可学完本课程所有内容。主板DshanMCU-103是基于STM32F103C8T6的最小系统板。之所以选择最小系统板,而不是把所有模块都放在一个整体的电路板上,目的如下:低成本尝试:嵌入式软件开发并不一定适合你,可以购买最小系统板进行体验、及时放弃按需购买:用到再买,讲究一个性价比 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值