自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (4)
  • 收藏
  • 关注

转载 linux世界里的时间

通常,操作系统可以使用三种方法来表示系统的当前时间与日期:①最简单的一种方法就是直接用一个64位的计数器来对时钟滴答进行计数。②第二种方法就是用一个32位计数器来对秒进行计数,同时还用一个32位的辅助计数器对时钟滴答计数,之子累积到一秒为止。因为232超过136年,因此这种方法直至22世纪都可以让系统工作得很好。③第三种方法也是按时钟滴答进行计数,但是是相对于系统启动以来的滴答次数,而

2011-10-29 12:39:45 575

转载 sprintf函数的用法

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参

2011-10-16 11:05:52 659

转载 error: unknown field ‘ioctl’ specified in initializer

异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序就根本不需要查询设备的状态,这一点非常类似于硬件上的“中断”的概念,比较准确的称谓是“信号驱动的异步I/O”。信号是在软件层次上对中断机制的一种模拟,在原理上一个进程接收到一个信号与处理器接收到一个中断请求是

2011-10-12 20:00:15 9419 4

转载 “asm/semaphore.h: No such file or directory”

今天编译发现一个error: “asm/semaphore.h: No such file or directory” ,发现2.6.19和2.6.31对这个信号量声明并不相同[patch] include linux/semaphore.h for kernel 2.6.2

2011-10-08 20:03:11 4801 1

原创 如何启用 Ubuntu 中的 root 帐号

sudo su -不就行了?

2011-10-04 16:47:54 507

转载 linux驱动学习笔记(2.3) scull模块 init_MUTEX被废除

一、今天在编译ldd3上的scullc的时候,出现如下错误:刚开始我以为没有包含头文件,然后我就去查2.6.39.1的源代码,结果在所有的符号中都没有发现init_MUTEX,后面在网站上发现了init_MUTEX的定义,如下所示:源码衔接:http://lx

2011-10-04 16:10:15 3721 1

转载 memset函数详解

memest原型 (please type "man memset" in your shell)  void *memset(void *s,  int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清

2011-10-02 20:06:02 569

转载 ARM的三种中断调试方法介绍

1 嵌入式软件开发流程   参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。   在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工

2011-09-26 09:56:35 974

原创 异步套接字基础:select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET

select函数:<br />        系统提供select函数来实现多路复用输入/输出模型。原型:<br />        #include sys/time.h><br />        #include unistd.h><br />        int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout);<br />          参数maxfd是需要监视的最大的文件描

2011-05-30 22:37:00 518

转载 arm cpsr的c x s f 位

<br />msr cpsr_cxsf,r1        ;这里的cxsf表示从低到高分别占用的4个8bit的数据域<br />指令中有时还有出现cpsr_cf, cpsr_all, cpsr_c等,这里:<br />        c 指 CPSR中的control field ( PSR[7:0])<br />        f 指 flag field (PSR[31:24])<br />        x 指 extend field (PSR[15:8])<br />        s 指 st

2011-04-06 18:44:00 1230

原创 bootloader与linux中位置无关代码的分析理解

<br /><br />首先,需要理解加载域与运行域的概念。加载域是代码存放的地址,运行域是代码运行时的地址。为什么会产生这2个概念?这2个概念的实质意义又是什么呢?<br />在一些场合,一些代码并不在储存这部分代码的地址上执行地址,比如说,放在norflash中的代码可能最终是放在RAM中运行,那么中norflash中的地址就是加载域,而在RAM中的地址就是运行域。<br />在汇编代码中我们常常会看到一些跳转指令,比如说b、bl等,这些指令后面是一个相对地址而不是绝对地址,比如说b main,这个指令

2011-03-01 14:05:00 1616

原创 C语言中Exit函数的使用

<br /><br />exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束<br />  return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值..<br />  exit(1)表示进程正常退出. 返回 1;<br />  exit(0)表示进程非正常退出. 返回 0.<br />  进程环境与进程控制(1): 进程的开始与终止<br /

2011-02-24 09:17:00 43039 5

原创 main函数的参数

<br />C程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数,是所有程<br />序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用<br />的是有参函数,则参数在调用时传递。<br />main()<br />{<br />...<br />y1=f1(x1,x2);<br />...<br />}<br />f1(int a,int b)<br />{<br />....<br />Y2=f2(x3,x4);<br />....<br /

2011-02-23 15:21:00 663

原创 main函数的参数

<br />C程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数,是所有程<br />序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用<br />的是有参函数,则参数在调用时传递。<br />main()<br />{<br />...<br />y1=f1(x1,x2);<br />...<br />}<br />f1(int a,int b)<br />{<br />....<br />Y2=f2(x3,x4);<br />....<br /

2011-02-23 15:21:00 591

原创 对于*(mmu_tbl_base)+virtuladdr>>20等的一点理解

<br />如下:<br /><br />unsigned long *mmu_tlb_base = (unsigned long *)0x30000000; <br />如果执行mmu_tlb_base=mmu_tlb_base+1,会得到mmu_tlb_base为0x30000004的结果,对于指针的加减操作会将+1自动转换为+指针类型字节数 <br />(unsigned short *)mmu_tlb_base+1的结果是0x30000002 <br />(unsigned long)mmu_tlb

2011-01-21 19:11:00 2061

原创 堆栈的问题 SP指针

<br />为什么将SP设为 4096 设定之后怎么运行?是从4096开始写然后再写4095还是往4097写?4096是steppingstone的地址吗?<br />中断为什么设为3072?<br /> <br /> <br />S3C2410、S3C2440有内部RAM、外部的SDRAM,这些都被称为内存;<br />SP设在内存上,可以是内部RAM,也可以是SDRAM,只要不破坏当前运行的程序就可以了。<br /><br /><br />启动时首先执行内部RAM的4096,然后将NAND的代码移到SD

2011-01-20 21:23:00 2771

原创 关于ARM9协处理器CP15及MCR和MRC指令

<br /><br />在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的。CP15包含16个32位的寄存器,其编号为0~15。<br />访问CP15寄存器的指令<br />MCR   ARM寄存器到协处理器寄存器的数据传送<br />MRC   协处理器寄存器到ARM寄存器的数据传送<br />MCR指令和MRC指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指令的异常中断。<br />MCR指令<br />MCR指令将ARM处理器

2011-01-18 16:45:00 11704

原创 深入理解SP、LR和PC

<br /><br />深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益。<br />1、堆栈指针r13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不同的堆栈指针来索引。这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性。<br />2、连接寄存器r14(LR):每种模式下r14都有自身版组,它有两个特殊功能。

2011-01-18 13:54:00 44954 4

原创 为什么adrl r2,mem_cfg_val这里不用ldr r2,=mem_cfg_val,

<br />请教书中sdram裸机代码memsetup:<br />mov r1, #MEM_CTL_BASE<br />adrl r2,mem_cfg_val<br />add r3,  r1,#52<br />1:<br />ldr r4,  [r2],#4<br />str r4,  [r1],#4<br />cmp r1,r3<br />bne 1b<br />mov pc,lr<br />mem_cfg_val:<br />  .long 0x22011110<br />  .long 0x000

2011-01-17 21:08:00 1859

原创 指令B和BL的区别

<br /><br />B常用于不返回的跳转,比如跳到某个标号处,BL则用于子程序跳转(要返回,返回地地存于LR)<br />B. (注意B后面的“.”)这个“.”是指定当前的地址,如果使用 B.这条指令,其实就是死循环。

2011-01-17 14:41:00 1448

原创 指令B和BL的区别

<br /><br />B常用于不返回的跳转,比如跳到某个标号处,BL则用于子程序跳转(要返回,返回地地存于LR)<br />B. (注意B后面的“.”)这个“.”是指定当前的地址,如果使用 B.这条指令,其实就是死循环。

2011-01-17 14:41:00 3362

原创 ARM指令 LDR 和 ADR的一些区别

<br /><br />LDR 是ARM中的指令,也是伪指令。<br />当用 LDR r, =imd  // r 为寄存器, imd为立即数<br />LDR 是一条伪指令。编译器会根据 立即数的大小,决定用 ldr 指令或者是mov或mvn指令。<br />当imd能用mov或者mvn操作时,就将它翻译成一条mov或mvn指令。当imd大于mov或mvn能够操作的数时,编译器会将imd存在一个内存单元中,然后再用一条ldr指令加载这个内存单元的的值到寄存器中。<br />LDR r, label  和

2011-01-16 19:46:00 25985 3

原创 讲讲volatile的作用

<br />一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: <br />    1). 并行设备的硬件寄存器(如:状态寄存器) <br />    2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) <br />    3). 多线程应用中被几个任务共享的变量

2011-01-14 20:14:00 651

原创 WatchDog

<br />Watchdog是整个ARM体系结构中相对比较简单的接口,控制代码只有几行,写起来比较容易。首先选择学习watchdog,可以快速入门,先对底层硬件工作原理有个初步的认识。(Watchdog即通常我们所说的“看门狗”) Watchdog原理上就是一个定时器。定时器timer对时钟进行计数,当定时器溢出时,产生复位信号,使得整个系统复位。在程序或嵌入式系统中,需要定期的对看门狗timer进行复位重新计数,定时器不会溢出复位系统,从而保证系统的正常运行。当某种原因(例如干扰)引起程序跑飞或者进入死循

2011-01-14 18:24:00 1153

原创 gcc命令中参数c和o混合使用的详解

操作系统:windows xp , 软件:msys , 编译器:gcc <br /><br />gcc -c a.c  编译成目标文件a.o <br /><br />gcc -o a a.o  生成执行文件a.exe <br /><br />gcc a.c  生成执行文件a.exe <br /><br />gcc -o a -c a.c    编译成目标文件a <br /><br />gcc -o a  a.c    生成执行文件a.exe <br /><br /><br />在a.c中引用test

2010-11-06 18:41:00 843

原创 终端中用命令成功修改linux~Ubuntu PATH环境变量

问题:路径设置明明没有问题,arm-linux-gcc -v ,也可以正确显示版本信息(我用的是4.3.3的EABI编译器),但make zImage时总是提示找不到arm-linux-gcc可能性分析:网上资料:       1.应该是在     makefile   中指出你的   gcc     的源路径 估计是这样 CC=/usr/local/arm/3.3.2/bin/arm-linux-gcc #CC= gcc   2.你的arm-linux-gcc不在默认路径内。按上面说的加路径   3.安装

2010-11-05 00:28:00 879

转载 2440-中断寄存器详解

<br />2440-中断寄存器详解 <br />S3C2440的中断寄存器:<br />1.中断分两大类 :内部中断和外部中断。<br />2.外部中断。 24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。具体参考datesheet数据手册。<br />寄存器:EXTINT0-EXTINT2 :三个寄存器设定EINT0-EINT23的触发方式。<br />              EI

2010-10-12 18:09:00 558

转载 基于ARM9芯片S3C2410异常中断程序设计(转载)

基于ARM9芯片S3C2410异常中断程序设计摘要:验证的代码详细分析了基于ARM嵌入式系统的异常处理流程。然后阐明关键字“-irq”的作用,设计出中断处理函数。最后,通过设置中断控制寄存器,设计外部中断EINT3的初始化程序,并给出主程序流程图。实践证明程序运行稳定可靠。关键字:S3C2410 异常 –irq 中断引言计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。异常主要是从处理器被动接受的角度出发的一种描述,指意外操作引起的异常。而中断则带有向处理器主动申

2010-10-12 10:58:00 990

原创 运放单电源与双电源问题探讨

运放作为低频电路的主要元件之一,在供电方式上有单电源和双电源两种,而选择何种供电方式,是初学者的困惑之处,本人也因此做了详细的实验,在此对这个问题作一些总结。<br />       首先,运放分为单电源运放和双电源运放,在运放的datasheet上,如果电源电压写的是(+3V-+30V)/(±1.5V-±15V)如324,则这个运放就是单电源运放,既能够单电源供电,也能够双电源供电;如果电源电压是(±1.5V-±15V)如741,则这个运放就是双电源运放,仅能采用双电源供电。<br />       但是

2010-10-06 20:52:00 5326

转载 ARM汇编语言子例程设计方法

<br />在嵌入式软件系统开发过程中,大量使用C语言进行应用程序开发以提高开发效率。同时,系统中经常包含一些决定整个系统性能的关键模块,此时为了获得最佳性能,经常使用汇编语言编写它们,或者某些特殊情况下,例如操作硬件等,也必须使用汇编语言。<br />函数是C语言中一个重要的概念,在汇编语言中经常使用子例程或过程(subroutine or procedure)表达同样的概念,本文使用术语子例程。本文首先介绍ARM汇编语言子例程设计的一般方法,并以此为基础提出一种新的基于堆栈帧的设计方法,同时介绍与C语言

2010-09-22 09:52:00 1712

原创 内嵌汇编的注意事项

<br />在了解内嵌汇编的具体使用方法之后,还有几点事项必须在编程时注意。<br />(1)必须小心使用物理寄存器。<br />在使用内嵌汇编程序设计方法时,必须要小心使用物理寄存器,主要指R0~R3、PC、LR寄存器,以及CPSR中的N、Z、C和V标志位等。因为在计算汇编代码中的C表达式时,可能会使用这些物理寄存器,并会修改N、Z、C和V标志位。<br />例如:<br />__asm <br />{<br />MOV  var,x<br />ADD  y,var,x/y<br />          

2010-09-22 09:38:00 2118

原创 ARM伪指令

 AREA伪指令<br />此伪指令用于给一段汇编代码或数据段起一个名字.一个完整的汇编程序至少要有一个以上的代码段,其语法格式为<br /> AREA  段名属性1,属性2,....<br />例: AREA init CODE,READONLY  定义了段名为init的属性为只读的代码.<br />其用意主要是当代码比较长时,可以根据功能来划分代码段,增加程序的可读性.所以段名的命名要符合该程序段的功能,换句话说也就是让人一看段名就知道该程序段是干什么用的.<br /> <br />   2.  EQU

2010-09-19 20:50:00 1440

原创 ARM立即数,LDR和MOV的区别

Mov 是把立即数赋给一个寄存器,但对立即数的范围有要求。只能是由8bit连续有效位通过偶数次移位能得到的数。如果立即数超出这个范围,就没办法用一条MOV指令给寄存器赋值。LDR除了普通的读数之外,也有给寄存器赋立即数的功能。你只要写 LDR R0,=0xabcdef它没有立即数范围的限制。因为这是一条伪指令。如果立即数在MOV的要求内,那就用一条汇编来实现。如果不在Mov的范围内,就用其它方式实现,如变成两条指令,或从PC偏移地址读一个32位数给寄存器。MOV是从一个寄存器或者移位的寄存器或者立即数的值传

2010-09-19 19:08:00 1170

原创 DNW使用和常见问题

<br />在使用2410开发板进行开发过程中,DNW是一个经常使用到的工具,这个工具可以实现上传下载文件,烧写文件,运行映像等功能。用户在第一次使用时往往因为不熟悉一些操作的细节,从而出现一些问题。下面把这些问题归纳一下:DNW可以通过USB口把文件下载到板子上,但是第一次使用时,必须在PC机上安装和2410 USB HOST进行通讯的USB驱动,该驱动文件位于光盘的“USB驱动”文件夹内,驱动文件名为secbulk.inf。那何时系统会提示您安装这个驱动呢?首先您需要确信一条串口线已经将PC和2410之

2010-09-18 11:03:00 10633

原创 指令、伪操作、伪指令和宏指令区别

<br />汇编语言程序中的语句可以由指令、伪指令和宏指令组成。<br />指令:每一条指令都对应一种CPU操作。<br /><br />伪指令又称为伪操作,它是在对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能。<br /><br />宏指令是由用户按照宏定义格式编写的一段程序,其中语句可以是指令、伪指令,甚至是已定义的宏指令。<br />伪指令和指令的区别在于,每一条指令必须生成机器代码,然后在程序运行期间由CPU来执行其操作;而伪指

2010-09-05 21:19:00 16251 1

__main函数内幕——从加载视图到执行视图.pdf

非常不错的参考资料,看过了,现在分享一下

2012-02-23

单片机驱动DM9000网卡芯片(详细调试过程).

非常不错的资料,免费下载,肯定不会后悔的 我参考了,很不错

2012-02-23

bootloader学习笔记

很不错的参考资料,你下载了一定不会后悔的,欢迎下载,谢谢

2011-02-20

arm学习资料(初学必备)

arm 经典学习资料,让你对ARM有个更深刻的理解,初学必备

2010-10-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除