Arm & Asm
win9zz
Life is brief, and then you die, you know?
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MRS,MSR指令详解
在ARM处理器中,只有MRS(Move to Register from State register)指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。例如:MRS R1,CPSR ; 将CPSR状态寄存器读取,保存到R1中MRS转载 2016-12-25 22:29:48 · 3274 阅读 · 0 评论 -
2440裸板程序之时钟初始化
LED对应的引脚是GPF4、GPF5、GPF6。 使用的编译器为arm-linux-gcc-4.5.1。 包括四个文件head.S main.c main.lds Makefile。 实验目的:把CPU主频提高到400Mhz。(FCLK:400 HCLK:100 PCLK:50) 2440使用MPLL和UPLL将来自晶振或外部时钟倍频至合适的频率,UPLL输出原创 2018-01-11 20:17:42 · 1867 阅读 · 0 评论 -
BSS段及其他
BSS的引入C语言中包括局部变量和全局变量。局部变量存储位置在栈上(不包含静态局部变量),全局变量(和静态全局变量)存放在数据段。全局变量在内存中只有一份,局部变量(非静态)可以是多份。 BSS全称Block Started by Symbol,用来存放没有初始值或初始值为0的全局变量(静态局部变量)。BSS段没有内容,所以它在文件中也不占据空间,程序运行时初始化。 命令原创 2018-01-12 22:13:53 · 1904 阅读 · 0 评论 -
编写bootloader(二)
开发板:JZ2440v2 内核:64M NAND Flash:256M 烧写内核使用到的U-boo及kernelt: http://download.csdn.net/download/qq_33160790/10204086 http://download.csdn.net/download/qq_33160790/10204102bootloader一般分为原创 2018-01-13 18:48:52 · 1905 阅读 · 0 评论 -
2440裸板程序之inline关键字
续之前的内容:2440裸板程序之内存初始化及重定位将点灯程序中wait延时函数声明为inline函数。并修改makefile,将优化等级选成-O1或以上,那么wait函数将被嵌入main函数中。pc指针需要指向的地址也由0x30000038变为0x30000000。 需要修改的内容:1.head.S中55行改为ldr pc,=0x300000原创 2018-01-07 17:46:59 · 1674 阅读 · 0 评论 -
ARMv8(ARM64, AArch64)进阶之旅
ARM ArchitectureARM - The Architecture For The Digital World: http://www.arm.com/ the ARM Infocenter: http://infocenter.arm.com/help/index.jsp ARM v8ARMv8-A Reference Manual: http://info转载 2018-02-03 02:15:54 · 4080 阅读 · 0 评论 -
编写bootloader(一)
BootLoader功能:初始化nandflash,启动内核(转到其入口地址)。BootLoader要求:BootLoader启动内核时还需要传递给内核一些信息(tag),其中有两个必不可少的内存标记和命令行参数,当然还有一个机器ID,BootLoader传递的机器ID必须和内核支持的机器ID匹配。需要知道的信息:1.内核在nandflash中的地址。如果内核是uImage映像文件,跳原创 2016-12-23 16:53:04 · 1630 阅读 · 0 评论 -
asmlinkage的用法
在linux内核代码中,经常看到asmlinkage限定词,例如:asmlinkage long sys_getpid(void)等,介绍如下:asmlinkage 的定义(/usr/include/asm/linkage.h里面):`这里写代码片`#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))attribut转载 2018-01-10 19:19:03 · 2155 阅读 · 0 评论 -
ARM中断向量表的简单分析
一般编写arm的裸机程序的时候,创建中断向量表就把它放在0x00000000~0x0000001c中,一般都放在这个位置上。但是中断向量表也可以放在0xffff0000~0xffff001c中,知道这是怎么设置的么?开始看到的时候真的有点奇怪,因为在学习arm的时候,根本没去看arm中的协处理器CP15中的c1控制寄存器中的v位来控制,我们一般都使用默认的值0,则必须将中断向量表放在0x00000转载 2018-01-10 20:38:43 · 7946 阅读 · 0 评论 -
cotex m3汇编--thumb指令集
16-Bit Data Processing Instructions Instruction Function ADC Add with carry ADD Add ADR Add PC and an immediate value and put the result in a register AND Logical AND...原创 2018-03-14 21:42:01 · 3028 阅读 · 0 评论 -
os_cpu_a.asm文件分析(待续)
基于thumb指令集:http://blog.csdn.net/qq_33160790/article/details/79560878 原子操作:void OS_CPU_SysTickHandler (void){ OS_CPU_SR cpu_sr; OS_ENTER_CRITICAL(); /* Tell uC/OS-I原创 2018-03-14 22:04:36 · 2253 阅读 · 0 评论 -
冯诺依曼结构和哈佛结构
哈佛结构是,数据和代码分开存在。冯诺依曼结构是在哈佛结构之后提出的,冯诺依曼提出“代码本身也是一种数据”,解决了哈佛结构的一个问题——总线暂用资源太多。冯诺依曼结构是,数据和代码放在一起。首先,通过BIOS(Uboot)将硬盘(Flash)中的程序(数据和代码),全部拷贝到RAM。所以此时RAM内部会分为多个段——代码段,date段,bss段等等。这样相比哈佛结构,就节省了一套外部的数据总线和地址...转载 2017-09-10 21:50:39 · 1661 阅读 · 0 评论 -
CACHE一些概念
Allocation 分配在缓存(Cache)中发现一个位置,并把新的缓存(Cache)数据存到这个位置的过程。这个处理过程可能包括驱逐(evicting)缓存(Cache)中已存在的数据,从而为新的数据腾出空间。Associativity 关联指每个集(Set)里包含的行帧(line frames)数。也就是缓存(Cache)的路(way)数。Capacity Miss ...转载 2018-03-28 13:34:52 · 3847 阅读 · 0 评论 -
ATF(待续)
atf下载地址:git clone https://github.com/ARM-software/arm-trusted-firmware.git原创 2018-08-05 21:34:55 · 659 阅读 · 0 评论 -
DSB,ISB,DMB指令
CM3 中的另一股新鲜空气是一系列的隔离指令(亦可以译成“屏障”、“路障”,可互换使用——译者 注)。它们在一些结构比较复杂的存储器系统中是需要的(典型地用于流水线和写缓冲——译者注)。在 这类系统中,如果没有必要的隔离,会导致系统发生紊乱危象(race condition),(相当于数电中的“竞争 与冒险”——译者注).举例来说,如果可以在运行时更改存储器的映射关系或者内存保护区的设置,(通过...转载 2018-11-28 23:34:54 · 927 阅读 · 0 评论 -
ORR R0,R0,#R1_nF:OR:R1_iA
我是先看到这东西才开始疑惑的:这是S3C2440手册关于时钟介绍时的一部分,很明显它扯到了协处理器P15的C1寄存器,让我们来看看这是啥:原来iA位和nF位是控制CPU总线模式的:orr r0,r0,#R1_nF:OR:R1_iA这命令的意思肯定是让CPU的总线模式从“fast bus mode”变为“asynchronous bus mode”怎么理解#R1_转载 2017-07-20 18:06:40 · 2255 阅读 · 0 评论 -
2440裸板程序之代码重定位
LED对应的引脚是GPF4、GPF5、GPF6。 使用的编译器为arm-linux-gcc-4.5.1。 包括四个文件head.S main.c main.lds Makefile。 实验目的:将main.c中点灯程序从存放地址0x400重新加载到0x800,并跳到0x800执行。 涉及到地址无关码、伪指令等概念。还有编译器链接脚本中存放地址、运行地址等概念。对于2440,原创 2017-12-26 17:38:54 · 1820 阅读 · 0 评论 -
2440裸板程序之内存初始化及重定位
LED对应的引脚是GPF4、GPF5、GPF6。 使用的编译器为arm-linux-gcc-4.5.1。 包括四个文件head.S main.c main.lds Makefile。 实验目的:把点灯的程序搬运到内存中执行。2440使用nand启动时,会将nand前4k硬件搬运到内部4ksram中。如果需要运行大型程序的话,还要初始化外部内存原创 2017-12-27 19:48:31 · 2045 阅读 · 0 评论 -
arm汇编—bic ,orr
Rd, Rn, Oprand2BIC(位清除)指令对 Rn 中的值 和 Operand2 值的反码按位进行逻辑“与”运算。 (注意:ARM官方网站有误, 写的是补码)BIC 是 逻辑”与非” 指令, 实现的 Bit Clear的功能举例:BIC R0, R0 , #0xF0000000#将 R0 高4位清零BIC R1, R1, #转载 2016-12-25 22:29:11 · 1884 阅读 · 0 评论 -
ARM汇编必知必会
ARM指令集:ADC 带进位的32位数加法ADD 32位数相加AND 32位数的逻辑与B 在32M空间内的相对跳转指令BIC 32位数的逻辑位清零BKPT 断点指令BL 带链接的相对跳转指令BLX 带链接的切换跳转BX 切换跳转CDP\CDP2 协处理器数据处理操作CLZ 零计数CMN 比较两个数的相反数CMP 32位数比较EOR 3原创 2016-12-25 04:20:19 · 1709 阅读 · 0 评论 -
ARM汇编学习的总结
ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了。比较有用的是MOV B BL LDR STR还是通过具体汇编代码来学习吧。 @ disable watch dog timer mov r1, #0x53000000 //立即数寻址方式 mov r2, #0x0原创 2016-12-25 04:17:50 · 1415 阅读 · 0 评论 -
ARM协处理器命令MCR-MRC
ARM协处理器cp15,有16个寄存器,详细看《ARM体系结构与编程》这里我大概说一下MRC与MCR这两个协处理器操作,参考《s3c2440》元件手册P140页这两个命令是用于ARM寄存器与协处理器寄存器之间操作的,一个协处理器与寄存器之前操作的例子就是,一个浮点值在协处理器中转换成32位整型,然后它的结果传送到ARM920T的寄存器中MRC。相反则为MCR。最重要的应用就转载 2016-12-26 05:41:37 · 1313 阅读 · 0 评论 -
ARM系列之“什么是体系结构”
什么是体系结构? 所谓“体系结构”,也可以称为“系统结构”,是指程序员在为特定处理器编制程序时所“看到”从而可以在程序中使用的资源及其相互间的关系。体系结构最为重要的就是处理器所提供的指令系统和寄存器组。指令系统分为CISC(Complex Instruction Set Computer,复杂指令集计算机)和RISC(Reduced Instruction Set C转载 2016-12-26 06:44:35 · 2427 阅读 · 0 评论 -
理解adr,ldr指令
在阅读u-bootstart.S时,对adr和ldr指令有些疑惑,经韦老师指点,在参阅了一些网上的博文后,做了这个实验:参照韦老师的代码和Makefile写了test_adr.S:.text.globl _start_start: ldr r0,test adr r0,test ldr r0,=test nop转载 2016-12-26 18:24:19 · 2039 阅读 · 0 评论 -
ARM处理器基础
1.处理器工作模式 用户(usr):正常ARM程序执行状态 快中断(fiq):为支持数据传输或通道处理设计 中断(irq):用于一般用途的中断处理 管理(svc):操作系统保护模式 中止(abt): 数据或指令预取中止后进入 系统(sys):操作系统的特权用户模式 未定义(und):执行了一个未定义指令时进入 除用户模式以外,其他的所有6种模式称之为原创 2017-03-09 20:54:09 · 1374 阅读 · 0 评论 -
Error: invalid constant after fixup
用arm-linux-gcc编译的时候碰到了这个错误:led_on.S:5: Error: invalid constant (5C012) after fixup网上搜了一下,有如下解释:MOV R1,#0x0005C012 最好改成LDR R1,=0x0005c012 用mov的话只要立即数大于0x100后有些数可以编译通过但是有些数就不能编译通过 从上面的解原创 2017-06-23 05:36:37 · 3192 阅读 · 0 评论 -
GNU ARM 汇编指令
第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(www.gnu.org)上下载有关规范。一. Linux汇编行结构任何汇编行都是如下结构:[:] [}转载 2017-07-17 13:50:09 · 1777 阅读 · 0 评论 -
ARM汇编编程规则
1. 基本概念 • ATPCS (ARM-Thumb Procedure Call Standard) 规定了一些子程序间调用的基本规则,这些规则包括子程序调用过程中寄存器的使用规则,数据栈的使用规则,参数的传递规则。有了这些规则之后,单独编译的C语言程序就可以和汇编程序相互调用。 使用ADS的c语言编译器编译的C语言子程序满足用户指定的ATPCS类型。而对于汇转载 2017-07-17 14:20:39 · 2013 阅读 · 0 评论 -
关于ARM的异步总线和同步模式
关于ARM的异步总线和同步模式快速总线模式:在快速总线模式,GCLK来自于BCLK,FCLK输入被忽略。这意味着BCLK被用来控制AMBA ASB接口和内部的ARM920T处理器核。复位时,ARM920T进入快速总线模式,操作使用BCLK。一般快速总线模式在启动代码时执行,然后由软件配置PLL产生高频的FCLK。在PLL稳定后可以切换ARM920T到同步或异步时钟,使用FCLK进行转载 2017-07-21 17:16:56 · 2593 阅读 · 0 评论 -
S3C2440 cp15协处理器详解
2440的协处理器CP15总共有c0~c15这16个协处理器寄存器,各自具有一定的功能定义。但总的来说,cp15主要跟以下功能有关:1、获取device id和cache type等一些CPU相关信息。2、MMU操作。包括MMU的使能和禁止,虚拟地址到物理地址的映射机制建立3、访问权限控制。主要用来实现安全机制和Linux的写时复制(copy on write)。4、设置时钟模式。转载 2017-07-19 03:41:33 · 1811 阅读 · 0 评论 -
ARM协处理器CP15寄存器详解
用于系统存储管理的协处理器CP15MCR{cond} coproc,opcode1,Rd,CRn,CRm,opcode2MRC {cond} coproc,opcode1,Rd,CRn,CRm,opcode2coproc 指令操作的协处理器名.标准名为pn,n,为0~15 opcode1 协处理器的特定操作码. 对于CP15寄存器转载 2017-07-20 18:05:58 · 3106 阅读 · 0 评论 -
51 C语言与汇编语言混编
1.在C中内嵌汇编语句 在#pragma asm 与#pragma endasm 中加入要内嵌的汇编语句例子: #include void main() { P0^1=1; #pragma asm 汇编延时程序 #pragma endasm P0^1=0;} 2.C程序调用汇编 (1)C转载 2017-06-28 13:45:21 · 2541 阅读 · 0 评论 -
arm-linux-ld命令 ld链接脚本
引入我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来;其次,这些.o文件存在相互调用的关系;再者,我们最后生成的bin文件是要在硬件中运行的,每一部分放在什么地址都要有仔细的说明。我觉得在写makefile的时候,最为重要的就是ld的理解,下面说说我的经验: 首先,要确定我们的程序用没有用到标准的c库,或者一些系统的转载 2017-12-24 21:06:15 · 3703 阅读 · 0 评论 -
2440裸板程序之点灯
LED对应的引脚是GPF4、GPF5、GPF6_out。 使用的编译器为arm-linux-gcc-4.5.1。 包括四个文件head.S main.c main.lds Makefile。 head.S.text.global _start_start: ldr r0, =0x53000000 @Close WATCHDOG原创 2017-12-24 22:47:41 · 1927 阅读 · 0 评论
分享