摘要: 这里,我们要准备两个文件,一个是汇编文件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... 阅读全文
posted @ 2014-01-27 14:40 LOSER Z 阅读(1047) 评论(0) 推荐(0) 编辑
摘要: 首先我们要根据开发板原理图得到控制LED灯的引脚是哪个,我们现在以LED1为例,我们已经知道LED1由S5PV210的GPC1_3控制,因此我们按如下步骤进行: 第一步是配制S5PV210的GPC1_3为输出口; 第二步我们禁止GPC1_3的上、下拉电阻功能; 第三步就是控制GPC1_3输出高电平或低电平。 要想对GPC1进行配置,那我们需要知道其配置寄存器的地址,根据S5PV210的编程手册我们可以知道: GPC1的配置寄存器地址是:0xE0200080 GPC1数据寄存器地址是:0xE0200084 GPC1上、下拉控制寄存器地址是:0... 阅读全文
posted @ 2014-01-27 14:03 LOSER Z 阅读(835) 评论(0) 推荐(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、语法格式 ... 阅读全文
posted @ 2014-01-26 15:36 LOSER Z 阅读(3337) 评论(0) 推荐(0) 编辑
摘要: GNU ARM汇编程序设计中,每行的语法格式如下: [:] [] @comment 如果语句太长,可以将一条语句分几行来书写,在行末用“\”表示换行。“\”后不能有任何字符,包含空格和制表符(Tab) 参数说明: label:为标号,可选,可以使用字母,数字,下划线;除局部标号外,必须以字母或下划线开头。标号必须以“:”号结尾。标号大小写敏感 instruction | directive | pseudo-instruction:可选项,指令、伪指令、伪操作三者任选其一。注意:ARM指令,伪指令,伪操作,寄存器名称要么大写,要么小写,不可以大小写混合。 ... 阅读全文
posted @ 2014-01-26 12:06 LOSER Z 阅读(923) 评论(0) 推荐(0) 编辑
摘要: 一、编译器arm-linux-gcc 1、用arm-linux-gcc编译一个程序,一般它是要经过如下步骤的: 1.1、预处理阶段 编译器把上述代码中stdio.h编译进来,使用GCC的选项-E可以使GCC在预处理结束后停止编译过程,而不继续其他动作了。 1.2、编译阶段 首先检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,arm-linux-gcc把代码翻译成汇编语言。用户可以使用-S选项来进行查看,该选项只编译而不进行汇编,生成汇编代码。 1.3、汇编阶段 把编译阶段生成.s文件转成目标文件,使用者可使用选项... 阅读全文
posted @ 2014-01-25 21:17 LOSER Z 阅读(1741) 评论(0) 推荐(0) 编辑
摘要: 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... 阅读全文
posted @ 2014-01-25 14:53 LOSER Z 阅读(3368) 评论(0) 推荐(0) 编辑
摘要: 交换指令将一个存储单元内容与制定的寄存器内容相交换,交换指令为进程间同步提供了一种方便的解决途径。该指令产生一堆原子Load/Store操作,该操作发生在一个连续的总线操作中,在操作期间阻止其他任何指令对该存储单元的读/写。一、通用寄存器和存储器字数据交换指令SWP 1、作用 将一个内存单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另一个寄存器Rm的内容写入到该内存单元中。 2、语法格式 SWP{} ,,[] 3、参数说明 3.1、:确定指令的目标寄存器 3.2、:该寄存器包含将要被存储到内存单元中的数据 3.3、:内存单元地址寄... 阅读全文
posted @ 2014-01-25 14:06 LOSER Z 阅读(2052) 评论(0) 推荐(0) 编辑
摘要: 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... 阅读全文
posted @ 2014-01-24 19:05 LOSER Z 阅读(7809) 评论(0) 推荐(0) 编辑
摘要: 这两条指令结合,可用于对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、当需要保存或修改... 阅读全文
posted @ 2014-01-24 13:01 LOSER Z 阅读(1768) 评论(0) 推荐(0) 编辑
摘要: 当前程序状态寄存器CPSR可以在任何位处理器模式下被访问,它包含条件码标志、中断控制、当前处理器模式以及其他状态和控制信息。CPSR的结构图如下:一、条件标志位 CPSR最高4位:N(Negative)、Z(Zero)、C(Carry)和V(oVerflow)称为条件标志位。程序名中的算术或逻辑指令可以根据其执行结果修改这些条件标志位,之后的条件执行指令可以根据这些条件标志决定相应的指令是否被执行。各条件标志位的具体含义如下: 1、N(符号位) 该位设置为当前指令运行结果的BIT[31]的值。当两个由补码表示的有符号整数运算时,N=1表示运算的结果为负数;N=0表示结果为正数或零... 阅读全文
posted @ 2014-01-24 10:41 LOSER Z 阅读(3587) 评论(0) 推荐(1) 编辑
摘要: 一、字数据传送指令作用:用于把单一的数据传入或者传出一个寄存器。 1、LDR指令 1.1、作用 根据所确定的地址模式从内存中将一个32位的字段读取到目标寄存器,如果指令中的寻址方式确定的地址不是字对齐的,则读出的数值要进行循环右移。 1.2、语法格式 LDR{} , 1.3、参数说明 确定使用哪个通用寄存器作为目标寄存器 确定了指令编码中的I、P、U、W、Rn和位 2、STR指令 2.1、作用 将一个32位的字数据写入到指令中指定的内存单元 2.2、语法格式 STR{} ,二、字节数据传送指令(LDR... 阅读全文
posted @ 2014-01-23 16:59 LOSER Z 阅读(3194) 评论(0) 推荐(0) 编辑
摘要: 一、数据处理指令概述 1、概念 数据处理指令是指对存放在寄存器中的数据进行处理的指令。主要包括算术指令、逻辑指令、比较与测试指令以及乘法指令 如果在数据处理指令前使用S前缀,指令的执行结果将会影响CPSR中的标志位。 2、语法格式 数据处理指令的基本语法格式 {}{S} ,, 3、参数说明 :标志指令的条件域是否更新CPSR :指示第一源操作数寄存器 :指示目的寄存器 :指示第二源操作数 4、操作码 5、的寻址方式二、数据传送指令 1、MOV指令 1.1、作用 把一个数N送到目标寄存器Rd,其中N可以是寄存器,也可以是立即数 1.2、语法格式(... 阅读全文
posted @ 2014-01-23 14:17 LOSER Z 阅读(2435) 评论(0) 推荐(1) 编辑
摘要: 一、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、作用 带连接的跳转... 阅读全文
posted @ 2014-01-22 14:44 LOSER Z 阅读(5759) 评论(0) 推荐(0) 编辑
摘要: 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和用 阅读全文
posted @ 2014-01-22 12:19 LOSER Z 阅读(1029) 评论(0) 推荐(0) 编辑
摘要: 一分段机制 1、什么是分段机制 分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元。 2、什么是段 每个段由三个参数定义:段基地址、段限长和段属性。 段的基地址、段限长以及段的保护属性存储在一个称为段描述符的结构项中。 3、段的作用 段可以用来存放程序的代码、数据和堆栈,或者用来存放系统数据结构。 4、段的存储地址 系统中所有使用的段都包含在处理器线性地址空间中。 5、段选择符 逻辑地址包括一个段选择符或一个偏移量,段选择符是一个段的唯一标识,提供了段描述符表,段描述符表指明短的大小、访问权限和段的特权级、段类型以及段的第一个字节在线性地... 阅读全文
posted @ 2014-01-21 16:06 LOSER Z 阅读(4631) 评论(0) 推荐(1) 编辑
摘要: 一内核组成部分 内核是一个操作系统的核心,主要由五个部分组成:进程调度,内存管理,虚拟文件系统,网络结构,进程间通信。 1、进程调度(SCHED) 控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其他资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。 2、内存管理(MM) 允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总数可以超过实际内存的大小操作系统只是把当前使用的程序块保留... 阅读全文
posted @ 2014-01-21 12:18 LOSER Z 阅读(603) 评论(0) 推荐(0) 编辑
摘要: 1什么是系统调用 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。 从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。 系统服务之所以需要通过系统调用来提供给用户空间的根本原因是为了对系统进行“保护”,因为我们知道Linux的运行空间分为内核空间与用户空间,它们各自运行.. 阅读全文
posted @ 2014-01-19 09:37 LOSER Z 阅读(472) 评论(0) 推荐(0) 编辑
摘要: Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等 待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non- block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相 同,若事件没有发生则返回一个代码来告知.. 阅读全文
posted @ 2014-01-18 18:41 LOSER Z 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 一 主机数据库函数#include struct hostent *gethostbyaddr(const void *addr, //地址 size_t len, //长度 int type //类型 );struct hostent *gethostbyname(const char *name); 这些函数返回的结构中至少包含以下几个成员struct hostent{ char *h_name; //主机名称 ... 阅读全文
posted @ 2014-01-17 19:14 LOSER Z 阅读(392) 评论(0) 推荐(0) 编辑
摘要: 一 什么是套接字 套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发既可以在本地单机上进行,也可以跨网络进行。 二 套接字属性 套接字的特性由3个属性确定,它们是:域,类型和协议 1 套接字的域 域指定套接字通信中的网络介质,最常见的套接字域是AF_INET,它指的是Internet网络,其底层的协议——网际(IP)只有一个地址族,它使用一种特定的方式来指定网络中的计算机,即人们常说的IP地址。 AF_UNIX域是UNIX文件系统域,即使是一台还没联网的计算机上的套接字也可以使用这个域,这个域的底层协议是文件输入/输出,而它的地址就是文件名。 2 套接字类型 ... 阅读全文
posted @ 2014-01-17 13:11 LOSER Z 阅读(2185) 评论(0) 推荐(1) 编辑