ARM上编程值得注意的地方1:
1.arm是一个32位处理器,通常,如果没有特殊的要求,c语言中的
结构struct要求4字节对齐的。
2.在实际的代码中(比如,tcp/ip协议),会有如下两种问题:
a:要求多个数据是紧密在一个4字节中;
b:有的4字节的数据,但是,数据在内存中并不是4字节对齐存储的
arm和x86不同,arm不支持非对齐字节的数据传输。就是说,在c语
言里,一旦使用了32位的指针操作一个非4字节对齐的数据,arm就
会陷入一个异常。
这个问题将会给一些软件的移植,带来很多麻烦。一定要小心的处
理这些问题。
在现在常用的arm版本中,都不支持非对齐字的传输,主要包括
armv4,armv5及相关的系列产品。
在armv6中,开始支持非对齐字的传输。
ARM上编程值得注意的地方2:
流水线的影响:
通常在汇编中才能遇到的问题
比如:arm7中的三级流水线导致,所读取的pc(程序计数器)指针,
总是比当前执行的汇编代码的地址多8。arm7的指令流水线为:每条
指令分为3个阶段 取指->译码->执行
单周期指令3段流水线操作中,pc指向正在取指的指令而不是正在执
行的指令。
嵌入式系统中的应用程序:
带有mmu处理器上的app:os和app分开的;
没有mmu处理器上:如uclinux,ucosII,app和os是编译在一起的运行
的,os更象是一个大的函数库.
带有mmu的优缺点:
优:mmu的保护可以防止app的非法操作导致操作系统的崩溃;
加速app的编译和调试;
缺:处理效率的降低;系统复杂,成本提升
总之,面向专一应用的嵌入式应用不需要mmu的支持。
嵌入式linux下常见的FS:
RomFS:只读FS,可以放在ROM空间,也可以在系统的ram中,嵌入式
linux常用来作根文件系统;
RamFS:利用VFS自身结构而形成的内存文件系统,使用系统的RAM空
间;
JFFS/JFFS2:为flash设计的日志文件系统;
Yaffs:专门为nand flash设计的;
/proc:为内核和内核模块将信息发送给进程提供一种机制,可以查
看系统模块装栽的信息;
devFS:设备文件系统;
ext3:应用于磁盘的日志文件系统;
JFFS/JFFS2的优缺点:
日志文件系统;
提供了更好的崩溃、掉电安全保护;
jffs2支持对flash的均匀磨损;
在扇区级别上执行闪存擦除/写/读操作要比ext2文件系统好;
but,文件系统接近满时,jffs2会大大放慢运行速度——垃圾收集
Nand上yaffs文件系统的优势:
a.专门为Nand flash设计的日志文件系统;
b.jffs/jffs2不适合大容量的Nand flash,jffs的日志通过
jffs_node建立在ram中,占用ram空间:对于128m的nand大概需要4m
的空间来维护节点;启动的时候需要扫描日志节点,不社和大容量
的nand flash.
c.fat系统没有日志
-----------------------------
ARM编译器的选择:
linux kernel在arm上的编译
交叉编译器: arm-elf-gcc arm-linux-gcc
标准c库——应用程序:uc-libc,uclibc,glibc
阅读(1292) | 评论(0) | 转发(0) |