随笔分类 - ARM
摘要:gcc提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration -Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses -Wpointer-si...
阅读全文
摘要:计算机串口基本理论1.什么是串口?2,什么是RS-232?3,什么是RS-422?4,什么是RS-485?5,什么是握手?1,什么是串口? 串口是计算机上一种非常通用的设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简
阅读全文
摘要:这里,我们要准备两个文件,一个是汇编文件start.S,另一个是C文件led.c。汇编文件套用C文件中的开关灯函数,C文件套用汇编文件中延时函数。//start.S .global led_init led_init: @;GPC1CON @;GPC1PUDloop: mov r0,#1 @将1存到寄存器r0中,实现LED开灯效果 bl led_ops @调用C文件中的led_ops函数,此时led_ops函数调用的参数会自动从寄存器中取,即r0 mov r0,#0 @将0存到寄存器r0中,实现LED关灯效果 bl led_ops b lo...
阅读全文
摘要:首先我们要根据开发板原理图得到控制LED灯的引脚是哪个,我们现在以LED1为例,我们已经知道LED1由S5PV210的GPC1_3控制,因此我们按如下步骤进行: 第一步是配制S5PV210的GPC1_3为输出口; 第二步我们禁止GPC1_3的上、下拉电阻功能; 第三步就是控制GPC1_3输出高电平或低电平。 要想对GPC1进行配置,那我们需要知道其配置寄存器的地址,根据S5PV210的编程手册我们可以知道: GPC1的配置寄存器地址是:0xE0200080 GPC1数据寄存器地址是:0xE0200084 GPC1上、下拉控制寄存器地址是:0...
阅读全文
摘要:1、.section 1.1、语法格式 .section section_name[,"flags"[,%type[,flag_specific_arguments]]] 1.2、作用 定义一个段,每一个段以段名为开始,以下一个段名或者文件结尾为结束。 ELF格式允许的段标志: a:可分配 w:可写段 x:执行段 1.3、举例 .section .mysection @自定义数据段,段名为“.mysection”2、预定义段 .text、.data、.bss 2.1、语法格式 ...
阅读全文
摘要:GNU ARM汇编程序设计中,每行的语法格式如下: [:] [] @comment 如果语句太长,可以将一条语句分几行来书写,在行末用“\”表示换行。“\”后不能有任何字符,包含空格和制表符(Tab) 参数说明: label:为标号,可选,可以使用字母,数字,下划线;除局部标号外,必须以字母或下划线开头。标号必须以“:”号结尾。标号大小写敏感 instruction | directive | pseudo-instruction:可选项,指令、伪指令、伪操作三者任选其一。注意:ARM指令,伪指令,伪操作,寄存器名称要么大写,要么小写,不可以大小写混合。 ...
阅读全文
摘要:一、编译器arm-linux-gcc 1、用arm-linux-gcc编译一个程序,一般它是要经过如下步骤的: 1.1、预处理阶段 编译器把上述代码中stdio.h编译进来,使用GCC的选项-E可以使GCC在预处理结束后停止编译过程,而不继续其他动作了。 1.2、编译阶段 首先检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,arm-linux-gcc把代码翻译成汇编语言。用户可以使用-S选项来进行查看,该选项只编译而不进行汇编,生成汇编代码。 1.3、汇编阶段 把编译阶段生成.s文件转成目标文件,使用者可使用选项...
阅读全文
摘要:ARN汇编器支持ARM伪指令,这些伪指令在汇编阶段被翻译成ARM或Thumb指令。ARM伪指令包含ADR、ADRL、MOV32和LDR。一、ADR伪指令 1、作用 ADR是小范围地址读取伪指令,基于PC相对偏移地址或基于寄存器相对偏移地址读取到寄存器中,当地址值是字节对齐时,取值范围为-255到255,当地址值是字对齐时,取值范围-1020到1020 2、语法格式 ADR{}{.W} register,label 3、参数说明 3.1、.W:可选项,指定指令宽度 3.2、register:目标寄存器 3.3、label:基于PC或具有寄存器的表达式二、A...
阅读全文
摘要:交换指令将一个存储单元内容与制定的寄存器内容相交换,交换指令为进程间同步提供了一种方便的解决途径。该指令产生一堆原子Load/Store操作,该操作发生在一个连续的总线操作中,在操作期间阻止其他任何指令对该存储单元的读/写。一、通用寄存器和存储器字数据交换指令SWP 1、作用 将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另一个寄存器Rm的内容写入到该内存单元中。 2、语法格式 SWP{} ,,[] 3、参数说明 3.1、:确定指令的目标寄存器 3.2、:该寄存器包含将要被存储到内存单元中的数据 3.3、:内存单元地址寄...
阅读全文
摘要:ARM乘法指令完成两个数据的乘法,两个32位二进制数相乘的结果是64位的4积。其中: 1、“RadHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)链接形成的64位数,“[31:0]”只选取结果的最低有效32位 2、简单的赋值由“:=”表示 3、累加(将右边加到左边)是由“+=”表示一、MUL乘法指令 1、作用 将Rm和Rs中的值相乘,结果的最低32位保存到Rd中 2、语法格式 MUL{}{S} ,, 3、参数说明 3.1、S:S位(bit[20])决定指令的操作是否影响CPSR中的条件标志位N位和Z位的值。当S=1时,跟新CPSR...
阅读全文
摘要:这两条指令结合,可用于对CPSR或SPSR进行读/写操作。 当需要保存或修改当前模式下CPSR或SPSR的内容时,首先必须将这些内容传递到通用寄存器中1、MRS指令(Move to Register from Status Register) 1.1、作用 它将程序状态寄存器内容传输到通用寄存器 1.2、语法格式 MRS{} ,CPSR MRS{} ,SPSR 1.3、参数说明 :确定指令的目标寄存器,如果R15被用作目标寄存器,指令的执行结果不可预知,因为每执行一个指令,PC都会改变。 1.4、使用场合 1.4.1、当需要保存或修改...
阅读全文
摘要:当前程序状态寄存器CPSR可以在任何位处理器模式下被访问,它包含条件码标志、中断控制、当前处理器模式以及其他状态和控制信息。CPSR的结构图如下:一、条件标志位 CPSR最高4位:N(Negative)、Z(Zero)、C(Carry)和V(oVerflow)称为条件标志位。程序名中的算术或逻辑指令可以根据其执行结果修改这些条件标志位,之后的条件执行指令可以根据这些条件标志决定相应的指令是否被执行。各条件标志位的具体含义如下: 1、N(符号位) 该位设置为当前指令运行结果的BIT[31]的值。当两个由补码表示的有符号整数运算时,N=1表示运算的结果为负数;N=0表示结果为正数或零...
阅读全文
摘要:一、字数据传送指令作用:用于把单一的数据传入或者传出一个寄存器。 1、LDR指令 1.1、作用 根据所确定的地址模式从内存中将一个32位的字段读取到目标寄存器,如果指令中的寻址方式确定的地址不是字对齐的,则读出的数值要进行循环右移。 1.2、语法格式 LDR{} , 1.3、参数说明 确定使用哪个通用寄存器作为目标寄存器 确定了指令编码中的I、P、U、W、Rn和位 2、STR指令 2.1、作用 将一个32位的字数据写入到指令中指定的内存单元 2.2、语法格式 STR{} ,二、字节数据传送指令(LDR...
阅读全文
摘要:一、数据处理指令概述 1、概念 数据处理指令是指对存放在寄存器中的数据进行处理的指令。主要包括算术指令、逻辑指令、比较与测试指令以及乘法指令 如果在数据处理指令前使用S前缀,指令的执行结果将会影响CPSR中的标志位。 2、语法格式 数据处理指令的基本语法格式 {}{S} ,, 3、参数说明 :标志指令的条件域是否更新CPSR :指示第一源操作数寄存器 :指示目的寄存器 :指示第二源操作数 4、操作码 5、的寻址方式二、数据传送指令 1、MOV指令 1.1、作用 把一个数N送到目标寄存器Rd,其中N可以是寄存器,也可以是立即数 1.2、语法格式(...
阅读全文
摘要:一、Arm指令条件码和条件助记符二、跳转指令B 1、作用 跳转指令B使程序跳转到指定的地址执行程序(跳转范围是PC-32MB到PC+32MB) 2、指令格式(注:B后面如果有条件,条件就是紧跟在B后面,没有空格) B{} 3、参数说明 3.1、:它指示指令在什么条件下执行,可省略 3.2、:指令跳转的目标地址,指令通过下面的方法计算目标地址: A、将24位带符号的补码立即数符号扩展到32位 B、将扩展后的32位立即数左移两位 C、将得到的值加到PC寄存器中,即得到跳转的目标地址三、带连接的跳转指令BL 1、作用 带连接的跳转...
阅读全文
摘要:ARM微处理器上有37个32位的寄存器,其中有6个状态寄存器(一个CPSR,5个SPSR),其它31个为通用寄存器。在ARM的不同模式下,可以访问的物理寄存器是不同,如下图所示:从图中可知,用户模式和系统模式使用相同的物理寄存器,R0-R15,CPSR,共17个物理寄存器;FIQ模式(快速中断请求模式)中:R0-R7,R15,CPSR是和用户模式相同的物理寄存器,R8-R14是FIQ模式专有的;IRQ模式(中断请求模式)中:R0-R12,R15,CPSR和用户模式共用相同的物理寄存器,R13,R14,SPSR是IRQ模式专有的SVC模式(操作系统保护模式)中:R0-R12,R15,CPSR和用
阅读全文

浙公网安备 33010602011771号