vlambda博客
学习文章列表

关于linux嵌入式,一些应该知道的入门知识

前言

Preface

在对单片机使用的过程中,我们使用过很多控制器用于开发,在这个控制器的大家庭里51,stm32,Arduino,fpga可能在日常的学习和比赛中使用较多,但是,在生活中,嵌入式linux开发可能占据更多的领域。接下来就让我们一起来了解一下linux嵌入式的入门知识吧。

1

Cortex-A寄存器组

我们基于Cortex-A7内核展开,进行对于内核寄存器的简要叙述。

关于linux嵌入式,一些应该知道的入门知识

而内核寄存器,指的是内核中的寄存器,这是单片机运行时最底层的寄存器,通过控制单片机的内核寄存器可以对外设寄存器进行控制,但同时,内核寄存器的功能远不止于此。我们编写C语言需要一定的底层环境的支持,而堆栈指针(sp指针)则是其中必不可少的一部分。

ST公司为我们配置好了启动文件,也就是每次都需要添加的,后缀名为.s的文件。在这个文件中我们通过使用汇编语言对内核寄存器进行控制,用于搭建好C语言的环境,这样用高级语言更方便的编写我们的业务逻辑函数。

关于linux嵌入式,一些应该知道的入门知识

Cortex-A7有9种运行模式,在这里就不一 一叙述了。每个模式都有其对应的寄存器组,有的物理寄存器是各个模式共用的,有的是模式独有的。

2

ARM汇编

 在未配置好C语言环境时,我们需要进行汇编语言的编写。下面就简要说明一下汇编的语法

label:instruction @ comment

三者分别为: 标号,指令和注释

指令:汇编指令或伪指令。

汇编指令是我们操作的具体方法

MOV R0,R1 @将寄存器 R1 中的数据传递给 R0,即 R0=R1

MOV R0, #0X12 @将立即数 0X12 传递给 R0 寄存器,即 R0=0X12

MOV 指令用于将数据从一个寄存器拷贝到另外一个寄存器,或者将一个立即数传递到寄存器里面。

MRS R0, CPSR @将特殊寄存器 CPSR 里面的数据传递给 R0,即 R0=CPSR

MRS 指令用于将特殊寄存器(如 CPSR 和 SPSR)中的数据传递给通用寄存器,要读取特殊寄存器的数据只能使用 MRS 指令。

MSR CPSR, R0 @将 R0 中的数据复制到 CPSR 中,即 CPSR=R0

MSR 指令和 MRS 刚好相反,MSR 指令用来将普通寄存器的数据传递给特殊寄存器,也就是写特殊寄存器,写特殊寄存器只能使用 MSR。

LDR 主要用于从存储加载数据到寄存器 Rx 中,LDR 也可以将一个立即数加载到寄存器 Rx中,LDR 加载立即数的时候要使用“=”。

LDR R1, =0X20000002 @R1 保存要写入到寄存器的值,即 R1=0X20000002

STR 是将数据写入到存储器中。

ADD Rd, Rn, Rm

ADD Rd, Rn, #immed

ADC Rd, Rn, Rm

ADC Rd, Rn, #immed 

SUB Rd, Rn, Rm 

SUB Rd, #immed 

SUB Rd, Rn, #immed 

SBC Rd, Rn, #immed 

SBC Rd, Rn ,Rm

MUL Rd, Rn, Rm R

SDIV Rd, Rn, Rm

以上是常用的算术运算指令。

除了这些指令,还有逻辑运算指令,跳转指令,压栈和出栈指令等,在这里就不进行具体的叙述。

通过这些汇编指令,可以用来进行环境配置等,对于嵌入式Linux,很少有现成的配置和启动文件,因此对于基本的汇编指令的掌握十分有用。

以上便是关于Linux嵌入式两个最基本的内容,掌握以上相关知识是玩转Linux嵌入式的第一步,大家一定要熟记于胸。关于Linux的进阶内容,小舞会在后期的推文中与大家一起学习,敬请期待吧!



关注西工大舞蹈机器人基地

获取基地最新资讯


文稿:明宏泽

排版:郑泽

审核:李一平