单片机核心/RTOS必备 (前言)

编程入门 行业动态 更新时间:2024-10-25 16:27:40

<a href=https://www.elefans.com/category/jswz/34/1769836.html style=单片机核心/RTOS必备 (前言)"/>

单片机核心/RTOS必备 (前言)

学习路线差别

  1. 单片机入门(HAL):简单、快速、实际上工作中涉及单片机编程时,也提倡使用HAL库。对于学习来说,HAL库封装了很多技术细节,对技术成长帮助不大。
    比如,可能接触不到:重定位、代码段数据段BSS段、位置无关码、相对跳转、绝对跳转、设置栈、中断上下文、保存/恢复中断现场、ARM架构。
    这些知识,是单片机的核心,学习了它,有助于在RTOS领域发展。
  2. 单片机深入(基于寄存器):抛开HAL库,从芯片手册开始,自己写出一切代码。工作中绝对不建议这么做,但是学习时,可以学习到更深刻的知识。
    这些知识,也是后续学习RTOS、学习Linux的u-boot的必备知识。
  3. 不学单片机,直接上手Linux。

嵌入式发展历史

MCU->专用功能的硬件,运行RTOS。
Application Processor(MPU):MCU升级版本,添加DSP、GPU,运行Linux类的操作系统,安装应用程序->通用功能。

嵌入式系统硬件组成


系统支持SPI Flash启动,这意味着可以运行SPI FLASH上的代码,但是SPI FLASH不是XIP设备,cpu无法直接执行里面的代码。

CPU上电后,访问片内ROM(XIP设备),帮助CPU运行SPI Flash上的程序。

点亮LED灯

  1. 看原理图确定控制LED的引脚
  2. 看主芯片手册,确定如何设置/控制引脚
  3. 写程序

LED的电阻一般非常小,电压通常为3.3V,I = U/R,因此I就非常大,会立刻把灯烧坏,因此需要串联一个电阻

上面能点亮的前提是,GPIO可以输出3.3V/0V的电压,但有些芯片仅能输出1.2V或更低的电压,引脚的驱动能力不足




二极管:当左边电压大于右边电压时,电流就可以通过,发光二极管就可以发光。

当P极电压高于下面的N极时,三极管导通,上面的电流就可以往下。


对寄存器的操作:不要影响其它位

怎么访问寄存器?

用指针

unsigned int *p = 0x40010800; //p等于某个寄存器的地址
*p = val; //下寄存器
val = *p; //读寄存器

在X86架构中内存和IO是分开的,根据CPU发出的指令选择不同的设备。

X86属于复杂指令集计算机(CISC:Complex Instruction Set Computing)
它所用的指令比较复杂,比如某些复杂的指令,它是通过“微程序”来实现的。
比如执行乘法指令时,实际上会去执行一个“微程序”。
在微程序里一样是去执行这4个操作:

但是对于程序员来说,他看不到“微程序”,好像用一条指令就搞定了一切。

在ARM CPU看来,内存、IO的操作是一样的。

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

  1. 对内存只有读、写指令
  2. 对于数据的运算是在CPU内部实现
  3. 使用RISC指令的CPU复杂度小一点,易于设计

RISC和CISC

CISC指令能力强,但多数指令使用率低却增加了CPU的复杂度,指令是可变长格式。
RISC指令大部分为单周期指令,指令长度固定,操作寄存器,对于内存只有LOAD/STORE操作。

CPU内部有很多寄存器

无论是Cortex-M3/M4,还是Cortex-A7,CPU内部都有R0,…,R15寄存器,它们可以用来“暂存”数据。

对于R13,R14,R15,还有另外的用途:

  1. R13:Stack Pointer,栈指针。
  2. R14:Link Register,用来保存返回地址。
  3. R15:Program Counter,程序计数器,表示当前指令地址,写入新值即可跳转。


M3/M4:比较两个数时,结果保存在PSR中。
汇编指令使用“SP”,但是它可能对应不同的SP寄存器,一般情况下都是使用SP_main,运行RTOS时,可以让APP使用SP_Process。

xPSR:保存程序状态,比如上一条指令的执行结果、比较结果;也有一些控制作用,比如屏蔽中断、使能中断。

xPSR

对于Cortex-M3/M4来说,xPSR实际上对应3个寄存器。

  1. APSR: Apllication PSR,应用PSR
  2. IPSR:Interrupt PSR,中断PSR
  3. EPSR:Exectution PSR,执行PSR


这3个寄存器,可以单独访问:
MRS R0,APSR
MRS R0,IPSR
MSR APSR R0

这3个寄存,也可以一次性访问:
MRS R0,PSR
MSR PSR,R0

程序状态寄存器中的位域

  • N:负标志
  • Z:零标志
  • C:进位(或者非借位)标志
  • V:溢出标志
  • Q:饱和标志
  • GE:大于或等于标志
  • ICI/IT:中断继续指令
  • T:Thumb状态,总是1,清除此位会引起错误异常
  • 异常编号:表示处理器正在处理的异常。

更多推荐

单片机核心/RTOS必备 (前言)

本文发布于:2023-12-03 12:35:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1655408.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:单片机   前言   核心   RTOS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!