随笔分类 - ARM
嵌入式系统ARM
Linux定时器的使用
摘要:
使用定时器的目的无非是为了周期性的执行某一任务,或者是到了一个指定时间去执行某一个任务。要达到这一目的,一般有两个常见的比较有效的方法。一个是用linux内部的三个定时器,另一个是用sleep, usleep函数让进程睡眠一段时间,使用alarm定时发出一个信号,还有那就是用gettimeofday, difftime等自己来计算时间间隔,然后时间到了就执行某一任务,但是这种方法效率低,所以不常用。
阅读全文
使用定时器的目的无非是为了周期性的执行某一任务,或者是到了一个指定时间去执行某一个任务。要达到这一目的,一般有两个常见的比较有效的方法。一个是用linux内部的三个定时器,另一个是用sleep, usleep函数让进程睡眠一段时间,使用alarm定时发出一个信号,还有那就是用gettimeofday, difftime等自己来计算时间间隔,然后时间到了就执行某一任务,但是这种方法效率低,所以不常用。
阅读全文
关于S3C2440时钟设置的理解
摘要:
首先S3C2440内部有三个时钟
FCLK:主频时钟--主要做为芯片的内核时钟
HCLK: 总线时钟--主要是作为LCD,USB,DMA时钟信号
PCLK: 接口时钟--主要是作为串口,GPIO,SPI,ADC等接口时钟信号
2440通过设置引脚OM2和OM3来选择时钟源Fin(外部晶振或外部时钟源),时钟源信号Fin通过2440芯片内部的产生FCLK和HCLK、PCLK时钟信号,这3大时钟信号像动脉一样带动整个芯片的工作。
这三个时钟一般成比例关系,通常设置为1:4:8,1:3:6的分频关系,也就说如果主频FLCK是400MHz,按照1:4:8的设置,那么HLCK是100MHz,PLCK是50MHz。
阅读全文
首先S3C2440内部有三个时钟
FCLK:主频时钟--主要做为芯片的内核时钟
HCLK: 总线时钟--主要是作为LCD,USB,DMA时钟信号
PCLK: 接口时钟--主要是作为串口,GPIO,SPI,ADC等接口时钟信号
2440通过设置引脚OM2和OM3来选择时钟源Fin(外部晶振或外部时钟源),时钟源信号Fin通过2440芯片内部的产生FCLK和HCLK、PCLK时钟信号,这3大时钟信号像动脉一样带动整个芯片的工作。
这三个时钟一般成比例关系,通常设置为1:4:8,1:3:6的分频关系,也就说如果主频FLCK是400MHz,按照1:4:8的设置,那么HLCK是100MHz,PLCK是50MHz。
阅读全文
Big Endian 和 Little Endian
摘要:
谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是little endian呢?
阅读全文
谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是little endian呢?
阅读全文
nand flash坏块管理OOB,BBT,ECC
摘要:
NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 (Block) = xxxx (Pages),1(Page) =528 (Bytes) = 数据块大小(512Bytes) + OOB 块大小(16Bytes,除OOB第六字节外,通常至少把OOB的前3个字节存放Nand Flash硬件ECC码)。
关于OOB区,是每个Page都有的。Page大小是512字节的NAND每页分配16字节的OOB;如果NAND物理上是2K的Page,则每个Page分配64字节的OOB。如下图:
阅读全文
NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 (Block) = xxxx (Pages),1(Page) =528 (Bytes) = 数据块大小(512Bytes) + OOB 块大小(16Bytes,除OOB第六字节外,通常至少把OOB的前3个字节存放Nand Flash硬件ECC码)。
关于OOB区,是每个Page都有的。Page大小是512字节的NAND每页分配16字节的OOB;如果NAND物理上是2K的Page,则每个Page分配64字节的OOB。如下图:
阅读全文
nandflash与文件系统、oob数据扫盲……
摘要:
NAND Flash每一页大小为(512+16)字节(还有其他格式的NANDFlash,比如每页大小为(256+8)、(2048+64)等),其中的512字节就是一般存储数据的区域,16字节称为OOB(Out OfBand)区。通常在OOB区存放坏块标记、前面512字节的ECC较验码等。
阅读全文
NAND Flash每一页大小为(512+16)字节(还有其他格式的NANDFlash,比如每页大小为(256+8)、(2048+64)等),其中的512字节就是一般存储数据的区域,16字节称为OOB(Out OfBand)区。通常在OOB区存放坏块标记、前面512字节的ECC较验码等。
阅读全文
arm汇编adrl(以及ldr与adr的区别)
摘要:
看《嵌入式linux应用开发》第六章实例中看到个句:
adrl r2,men_cfg_val
最初对adr1相当不解,后来发现,那个不是数字1,而是字母l(认真看头部,有点区别的)
这里记录下ADRL的用法:
功能:将相对于程序或相对于寄存器的地址载入寄存器中。 与 ADR 指令相似。ADRL 生成两个数据处理指令,因此它比 ADR 加载的地址范围要宽。
阅读全文
看《嵌入式linux应用开发》第六章实例中看到个句:
adrl r2,men_cfg_val
最初对adr1相当不解,后来发现,那个不是数字1,而是字母l(认真看头部,有点区别的)
这里记录下ADRL的用法:
功能:将相对于程序或相对于寄存器的地址载入寄存器中。 与 ADR 指令相似。ADRL 生成两个数据处理指令,因此它比 ADR 加载的地址范围要宽。
阅读全文
ARM汇编特殊符号
摘要:
汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为汇编指示(Assembler Directive)或伪操作(Pseudo-operation),由于它不是真正的指令所以加个“伪”字。
_start是一个符号(Symbol),符号在汇编程序中代表一个地址,可以用在指令中,汇编程序经过汇编器的处理之后,所有的符号都被替换成它所代表的地址值。在C语言中我们通过变量名访问一个变量,其实就是读写某个地址的内存单元,我们通过函数名调用一个函数,其实就是跳转到该函数第一条指令所在的地址,所以变量名和函数名都是符号,本质上是代表内存地址的。
阅读全文
汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为汇编指示(Assembler Directive)或伪操作(Pseudo-operation),由于它不是真正的指令所以加个“伪”字。
_start是一个符号(Symbol),符号在汇编程序中代表一个地址,可以用在指令中,汇编程序经过汇编器的处理之后,所有的符号都被替换成它所代表的地址值。在C语言中我们通过变量名访问一个变量,其实就是读写某个地址的内存单元,我们通过函数名调用一个函数,其实就是跳转到该函数第一条指令所在的地址,所以变量名和函数名都是符号,本质上是代表内存地址的。
阅读全文
该死的UTF-8的BOM
摘要:
首先说明一下什么是BOM:
BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。
我在编译ARM汇编程序时,总是出现Error: bad instruction `'等等错误,经过认真分析,发现代码没有任何问题,应该是编码的问题,因为我平时习惯把所有文件都保存为UTF-8格式以方便在windows和linux之间查看,没有考虑到BOM有无问题,经UE多次更换保存格式后,发现使用UTF-8无BOM才能让编译顺利通过,这才发现UTF-8的BOM对ARM汇编无用,所以平时一般采用UTF-8无BOM格式即可。
阅读全文
首先说明一下什么是BOM:
BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。
我在编译ARM汇编程序时,总是出现Error: bad instruction `'等等错误,经过认真分析,发现代码没有任何问题,应该是编码的问题,因为我平时习惯把所有文件都保存为UTF-8格式以方便在windows和linux之间查看,没有考虑到BOM有无问题,经UE多次更换保存格式后,发现使用UTF-8无BOM才能让编译顺利通过,这才发现UTF-8的BOM对ARM汇编无用,所以平时一般采用UTF-8无BOM格式即可。
阅读全文
Linux下ARM汇编语法
摘要:
第一部分 Linux下ARM汇编语法
尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点 (www.gnu.org)上下载有关规范。
一. Linux汇编行结构
任何汇编行都是如下结构:
[:] [} @ comment
[:] [} @ 注释
Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。
阅读全文
第一部分 Linux下ARM汇编语法
尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点 (www.gnu.org)上下载有关规范。
一. Linux汇编行结构
任何汇编行都是如下结构:
[:] [} @ comment
[:] [} @ 注释
Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。
阅读全文
ARM汇编书写格式及符号(symbol)和表达式(expr)
摘要:
汇编语言的语句格式如下:
{symbol}{instruction/directive/pseud0-instruction}{;comment}
symbol:标号/局部标号/常量/变量
instruction:指令
directive:伪操作
pseudo-instruction:伪指令
comment:注释
{}中括号内是可选
阅读全文
汇编语言的语句格式如下:
{symbol}{instruction/directive/pseud0-instruction}{;comment}
symbol:标号/局部标号/常量/变量
instruction:指令
directive:伪操作
pseudo-instruction:伪指令
comment:注释
{}中括号内是可选
阅读全文
AXD 在win7 vista下 启动失败。error starting external process process error code 87
摘要:
系统是64位win7的,ADS1.2 。按照视频教程完成了一个简单的程序。
make之后然后debug,弹出窗口error starting external process process error code 87。初步估计是系统兼容问题。
将CodeWarrior for ARM Developer Suite.exe和AXD Debugger.exe设置为xp sp3兼容模式,禁用桌面元素,以管理员权限启用,确定即可。
重新打开文件。重新make和debug,能够正常debug。win7的配色方案有所改变。
阅读全文
系统是64位win7的,ADS1.2 。按照视频教程完成了一个简单的程序。
make之后然后debug,弹出窗口error starting external process process error code 87。初步估计是系统兼容问题。
将CodeWarrior for ARM Developer Suite.exe和AXD Debugger.exe设置为xp sp3兼容模式,禁用桌面元素,以管理员权限启用,确定即可。
重新打开文件。重新make和debug,能够正常debug。win7的配色方案有所改变。
阅读全文
Python2.5.4移植到arm-linux
摘要:1 移植需求需求:在Arm9上运行python2.5.4。ARM Target环境:S3C2410A & arm-linux-2.4.18,和 AT91SAM9261 & arm-linux-2.6.20。host编译环境:RHEL5U3, gcc 4.1.2, arm-linux-gcc 2.95.3,arm-linux-gcc 3.4.4需要cross compile的软件包:sqlite 3.6.14, python 2.5.4, boa-0.94.13.2 交叉编译sqlite先到 http://www.sqlite.org/download.html 下载最新的sql
阅读全文
TQ2440下的openssh移植
摘要:
移植ssh到arm 今天在internet上参考了几位前辈文章, 将ssh移植到了TQ2440的arm板上, 现在不需要用minicom来控制uclinux了。 板子上的串口终于可以接上采集器。 主要参考文章:
•http://blog.chinaunix.net/u1/43047/showart_371372.html
•http://blog.chinaunix.net/u2/63379/showart_513655.html
阅读全文
移植ssh到arm 今天在internet上参考了几位前辈文章, 将ssh移植到了TQ2440的arm板上, 现在不需要用minicom来控制uclinux了。 板子上的串口终于可以接上采集器。 主要参考文章:
•http://blog.chinaunix.net/u1/43047/showart_371372.html
•http://blog.chinaunix.net/u2/63379/showart_513655.html
阅读全文
nfs:server is not responding,still trying 原因与解决方案
摘要:今天,用开发板通过nfs挂载主机,想从主机上面拷贝一些资料,可是竟然出现:nfs:server is not responding,still trying , 我用的是友善之臂的mini2440,操作系统使用的是Ubuntu8.04。 本来还以为是nfs出了故障,但是google了一下发现原来不是nfs的原因,而是由于传送的数据太大,出现数据包丢失现象。 NFS 的默认传输协议是 UDP,而PC机与嵌入式系统通过UPD交互时就会出现严重的网卡丢包现象。可用的解决方案是:在客户端改用TCP协议,使用下面的命令, mount -t nfs -o intr,nolock,rsize=10...
阅读全文
goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中
摘要:本文内容概要:详细描述了移植goAhead 2.5到S3C2440的linux系统的过程、步骤、遇到的问题及其解决方法。开发环境: 宿主 机:window XP;虚 拟 机:ubuntu9.10; 交叉编译器:arm-uclibc-gcc(arm-linux-gcc-4.3.2可以顺利编译通过)———————————————————————————————————————————————————————————————————1. GoAhead Web服务器介绍goAhead Web服务器,小巧、精致,提供了值得称道的性能,特别适合于嵌入式系统,因此,在很多嵌入式产品如路由器中都用到了goA
阅读全文
GoAhead2.5源代码分析之1-用户管理(um.c)
摘要:Um.c(用户管理)umconfig.txt----------------------------------------TABLE=usersROW=0name=adminpassword=Uzgroup=Administratorprot=1disable=0TABLE=groupsROW=0name=Administratorpriv=4method=3prot=1disable=0TABLE=accessROW=0name=/main.htmlmethod=3secure=0group=Administrator------------------------------------
阅读全文
GoAhead2.5源代码分析之2-文件数据库(emfdb.c)
摘要:Emfdb.c(文件数据库)数据库按照下面结构体存放typedef struct dbTable_s { char_t *name; int nColumns; char_t **columnNames; int *columnTypes; int nRows; int **rows;} dbTable_t;每个table对应上面结构的一个变量。Name是table的名字nColumns是table有多少列columnNames是各个列的名字columnTypes是各个列中内容的类型,是字符串,还是整数nRows是table有多少行rows是:rows[n]指向各个行的指针,rows[n][m
阅读全文
GoAhead2.5源代码分析之3-用户管理实例(umui.c)
摘要:Umui.c(用户管理实例)文件中代码与webs-2-5\wwwdemo\um中的页面对应,(addgroup.asp、addlimit.asp、adduser.asp、delgroup.asp、dellimit.asp、deluser.asp、dspuser.asp、loadcfg.asp、savecfg.asp、um.htm)是这些页面调用的form、asp函数,通过这些实例,有助于对用户管理的理解。------------------------------------------------------------------------------------------------
阅读全文
GoAhead2.5源代码分析之4-用户管理用到的一些函数(uemf.c misc.c)
摘要:Uemf.c和misc.c(用户管理用到的一些函数)void error(E_ARGS_DEC, int etype, char_t *fmt, ...)功能:将出现的错误根据错误类型,输出对应字符串说明:函数中使用了var_start,var_end, var_arg等宏下面我们来探讨如何写一个简单的可变参数的C函数。写可变参数的C函数要在程序中用到以下这些宏:voidva_start(va_listarg_ptr,prev_param);typeva_arg(va_listarg_ptr,type);voidva_end(va_listarg_ptr);va在这里是variable-arg
阅读全文
GoAhead2.5源代码分析之5-块分配模块(h.c和balloc.c)
摘要:h.c和balloc.cint hAlloc(void ***map)功能:分配使用的map数组说明:-----------------------------------------------------------------------------------------------------------------int hFree(void ***map, int handle)功能:释放使用的map数组说明:--------------------------------------------------------------------------------------
阅读全文

浙公网安备 33010602011771号