arm编程与C语言的编程区别和方法

Python020

arm编程与C语言的编程区别和方法,第1张

汇编主要是要了解CPU指令及用法,常说的是PC机的x86汇编,指令是x86的复杂指令集。

arm汇编是arm的精简指令集,比x86容易学,程序格式倒是和x86汇编差不多。

C语言ARM的和x86的差不多,除了对硬件寄存器操作不同,其它语法和流程都一样。

arm汇编程序每一行是指定arm

core执行一条指令,每条指令都是硬件相关。

如:LDR

R3,

#1

用LDR指令将数值1放入R3寄存器准备参与运算

C语言与arm指令无关,只与逻辑运算有关,指定硬件地址的操作才与硬件相关;

如果用arm编译器来编译,每行可能编译出1到多条arm指令。

如:i++

//变量

i

递增1等效于LDR

R3,#1

用LDR指令将数值1放入R3寄存器准备参与运算ADD

R2,

R2,

R3

用ADD指令将R2、R3寄存器里的数值相加后放回R2寄存器以上等效汇编的R2、R3寄存器只是为了举例,C语言不像汇编,不需要由程序员指定用哪个寄存器参与运算,编译器编译时会根据程序结构自动判断选择。

无论是c语言还是汇编语言,编译器编译后的结果是机器执行码,很多人因为汇编语言比较难懂及指令相关,所以以为它就是机器语言,其实它仍是人类设计的编写程序的语言,仍需要编译器编译成机器码才能执行,它只是比C语言更接近硬件而已。

这种写法主要用在硬件寄存器的定义,很多 ARM MCU 在设计时,会保留一段(几个至几十上百不等)空间作为将来扩展的功能,或者高档 MCU 阉割为低档 MCU,又需要做到向上兼容,而采取的屏蔽某些功能寄存器的做法。

例如:

struct ADC {

  uint32_t CTRL

  uint32_t DATA

  uint32_t RESERVED[2] // 这里有两个 word 的空间保留,可能在高档 MCU 上有实际定义

  uint32_t FLAGS    

}

在arm中rULCON0是对应arm板上对应ULCON0寄存器的地址,通常是一个32位的寄存器,(0<<6)就是把0向左移6位,即把ULCON0寄存器32位中的第6个位置0,注意是从0位开始计数的。其他的类推