您的位置:首页 > 其它

嵌入式系统学习笔记(二)

2010-03-02 17:06 204 查看
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

嵌入式系统学习笔记
录入作者:SOFA120

录入时间:2010.3.2

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

中断向量表中指定了各异常中断与其处理程序的对应关系:1.它通常存放在存储地址的低端。在ARM体系结构中,异常中断向量表的大小为32字节。其中,每个异常中断占据4个字节大小,保留了4个字节空间。2.每个异常中断对应的中断向量表的4个字节的空间中存放一个跳转指令或者一个向PC寄存器中赋值的数据访问指令。3.通过这两种指令,程序将跳转到相应的异常中断处理程序处执行。4.存储器的前8个字中除了地址0x00000014之外,全部被用作异常矢量地址。
存储器大小端模式:1.大端模式:字数据的高位字节存储在低地址中;字数据的低位字节存放在高地址中。2.小端模式:低地址中存放字数据的低字节;高地址中存放字数据的高字节。
何谓非对准的存储器访问:在ARM中,如果存储单元的地址没有遵守对齐规则,则称为非对齐的存储访问操作。
片上总线:使片上不同IP核的连接实现标准化。基于IP核互联标准技术的发展,目前形成较有影响力的3种总线标准:IBM公司的CoreConnect、ARM公司的AMBA和Silicore Corp公司的Wishbone。
第六讲
ARM的指令集特点:1.ARM指令系统是按照嵌入式应用的要求精心设计的,与基于传统CISC结构的指令集相比,具有简洁、高效和便于实现的特点。2.是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成(Load-store 结构)。指令的条件执行;灵活的第2操作数;Thumb指令。
寻址方式:寻址方式就是处理器根据指令中给出的地址信息来寻找真实操作数地址(物理地址)的方式。1.立即寻址;2.寄存器寻址;3.寄存器间接寻址;4.基址加偏址寻址;5.堆栈寻址;6.块拷贝寻址;7.相对寻址。
32位有效立即数是间接得到的。在32位指令编码中存放32位立即数的方法是:在ARM数据处理指令中,当参与操作的第二操作数为立即数型时,每个立即数都是采用一个8位的常数循环右移偶数位而间接得到的。有效立即数immediate可以表示成:<immediate>=immed_8 循环右移(2×rotate_imm)。并不是每一个32位的常数都是合法的立即数,只有用上面构造方法得到的才是。
堆栈寻址:1.满递增堆栈(FA):堆栈指针指向最后压入的数据,且由低地址向高地址生成。2.满递减堆栈(FD) :堆栈指针指向最后压入的数据,且由高地址向低地址生成。3.空递增堆栈(EA) :堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。4.空递减堆栈(ED) :堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成
ARM指令集中有三种基本的数据存取指令:1.单寄存器的存取指令(LDR,STR) 2.多寄存器存取指令(LDM,STM)3.单寄存器交换指令(SWP)。
单寄存器存取指令是ARM在寄存器和存储器间传送单个字节和字的最灵活方式。它支持几种寻址模式,包括立即数和寄存器偏移、自动变址和相对PC的寻址。根据传送数据的类型不同,单个寄存器存取指令又可以分为以下两类:1.单字和无符号字节的数据传送指令;2.半字和有符号字节的数据传送指令。
第七讲
ARM汇编中的主要文件格式:1.汇编程序文件:*.S,用ARM汇编语言编写的ARM程序或Thumb程序。2.C程序文件:*.C,用C语言编写的程序代码。3.头文件:*.H,为了简化源程序,把程序中常用到的常量命名、宏定义、数据结构定义等单独放在一个文件中,一般称为头文件。
ARM汇编语句书写格式:

ARM汇编程序结构:在ARM(Thumb)汇编语言程序中,以程序段为单位组织代码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行的映象文件。
第八讲
预处理伪指令:在C语言中常常加入一些“预处理命令”,可以改进程序设计的环境,提高编程效率。不产生程序代码,因此也称为预处理伪指令。预处理伪指令并不是C语言本身的组成部分,不能直接进行编译,必须在编译前预先对这些特殊的命令进行“预处理”。预处理伪指令有三种:文件包含、宏定义和条件编译。特点:1.把文件包含的正文替换进来,如标准头文件和自定义头文件,其内容包括符号常量、复合变量原型、用户自定义的变量类型和函数的原型说明等;2.对宏定义进行宏扩展,减少了编程量,改进源程序的可读性,参数宏更减少了函数调用的开销;3.条件编译改善了编程的灵活性,也改善了可移植性。
宏的好处:1.可以提高代码的可读性,2. 宏提高了运行效率,但是浪费了程序空间。

参数宏和函数宏异同:1.二者都可以带有参数,都可以根据不同参数得到不同结果。
2.区别:一是参数宏的形式参数表中没有类型说明符,而函数有;二是参数宏在时空的开销上比函数都要小,宏无法节约空间而函数可以。预处理在处理参数宏时使用两遍宏展开,第一遍展开宏体,第二遍对展开的宏体用实参数替换形式参数。
volatile修饰符:易失性修饰符,说明所定义的变量或指针可以被多种原因修改。例如,有的变量在中断服务程序中会被修改,有的会被I/ O修改,这种修改带有随机性,防止丢失任何一次这种修改,因此要把它修饰为易失性的变量。注意,禁止把它作为寄存器变量处理,也禁止对它进行任何形式的优化。
ATPCS:为了使单独编译的C语言程序和汇编程序能够互相调用,定义了统一的函数过程调用标准ATPCS(ARM-Thumb Procedure Call Standard)。ATPCS定义了寄存器组中的{R0~R3}作为参数传递和结果返回寄存器,如果参数数目超过四个,则使用堆栈进行传递。
第九讲
进程与线程:
常量指针与指针常量;
void test(char *p)
{
char s[ ] = “hello”;
const char *pc = s; // 正确,指向常量字符串
pc[3] = ‘g’; // 错误, 常量不能被修改
pc = p; // 正确, 指针本身可以变
char *const cp = s; //正确,指针本身是常量
cp[3] = ‘a’; //正确,指针指向的是变量
cp = p; //错误,指针本身是常量
const char *const cpc = s; // 正确,都是常量
cpc[3] = ‘a’; // 错误
cpc = p; // 错误
} PC指向的单元是一个常量不能修改,但PC本身可以修改,指针本身也是变量,容易混淆的两种情况,常量在定义时可以给其赋值
位运算:
函数使用过程中内存的分配:函数调用过程中的参数传递是关键,全局变量由编译器决定,一直在内存存在直到程序运行结束,栈:每发生一次函数调用,系统就分配一段栈桢占用内存空间,调用结束则释放栈桢,由系统自动分配无需用户介入,堆:动态申请,动态释放。
可重入函数:可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数只使用局部变量,即变量保存在CPU寄存器或栈中。
设备驱动程序:
第十讲
四周期握手协议:1.设备1升高它的输出电平发出查询信号,告诉设备 2应准备好接受数据;2.当设备2接受数据时,升高它的输出电平来发出应答信号。这时,设备1已准备好发送数据,设备2已准备好接受数据;3.一旦数据传送完毕,设备2降低它的输出电平表示它已经接受完数据;4.看到设备2的应答信号变低,设备1降低它的输出电平。

闪存与 EEPROM的区别:1.EEPROM擦写和编程时要加高电压,这意味着重新编程时必须将芯片从系统中拿出来;而Flash使用标准电压擦写和编程,允许芯片在标准系统内部编程,这就允许Flash在重新编程的同时存储新的内容。2.EEPROM必须被整体擦写;Flash可以一块一块地擦写。大部分Flash允许某些快被保护,这一点对存储空间有限的嵌入式系统非常有用,即将引导代码放进保护块内而允许更新设备上其他的存储器块。
FLASH分类:
两类FLASH异同:NOR和NAND是现在市场上两种主要的非易失闪存技术。1.性能比较:NOR的读速度比NAND稍快一些;NAND的写入速度比NOR快很多;NAND的擦除单元更小,相应的擦除电路更少;2.接口差别:NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节,NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同;3.容量和成本:NAND flash的单元尺寸几乎是NOR器件的一半;4.可靠性和耐用性:在NAND闪存中每个块的最大擦写次数是100万次,而NOR的擦写次数是10万次。
I/O接口编址方式:I/O接口独立编址——端口映射方式,I/O接口与存储器统一编址方式——内存映射。1. 端口映射方式,内存地址空间与I/O接口地址空间分开,译码电 路较简单,并设有专门的I/O指令,编程序易于区分,且执行时间短,快速性好,只用I/O指令访问I/O端口,功能有限且要采用专用I/O周期和专用I/O控制线,使微处理器复杂化。2. 访问内存的指令都可用于I/O操作,数据处理功能强;同时I/O接口可与存储器部分共用译码和控制电路。一是I/O接口要占用存储器地址空间的一部分;二是因不用专门 的I/O指令,程序中较难区分I/O操作。
设置接口电路的必要性:I/O接口电路也简称接口电路。它是主机和外围设备之间交换信息的连接部件(电路)。它在主机和外围设备之间的信息交换中起着桥梁和纽带作用。a)解决CPU和外围设备之间的时序配合和通信联络问题。b)解决CPU和外围设备之间的数据格式转换和匹配问题。c)解决CPU的负载能力和外围设备端口选择问题。
LCD的显示方式:1.反射型LCD:底偏光片后面加了一块反射板,它一般在户外和光线良好的办公室使用。2.透射型LCD:底偏光片是透射偏光片,它需要连续使用背光源,一般在光线差的环境使用。3.透反射型LCD:是处于以上两者之间,底偏光片能部分反光,一般也带背光源,光线好的时候,可关掉背光源;光线差时,可点亮背光源使用LCD。
触摸屏的检测值为何需要修正:FM7843送回控制器的X与Y值仅是对当前触摸点的电压值的A/D转换值,它不具有实用价值。这个值的大小不但与触摸屏的分辨率有关,而且也与触摸屏与LCD贴合的情况有关。LCD分辨率与触摸屏的分辨率一般来说是不一样,坐标也不一样,因此,如果想得到体现LCD坐标的触摸屏位置,还需要在程序中进行转换:x=(x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin)
y=(y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin)
其中,TchScr_Xmax、TchScr_Xmin、TchScr_Ymax和TchScr_Ymin是触摸屏返回电压值x、y轴的范围,LCDWIDTH、LCDHEIGHT是液晶屏的宽度与高度。
第十一讲
系统的启动通常有两种方式:1.直接从Flash启动;2.将压缩的内存映像文件从Flash中复制、解压到RAM,再从RAM启动。
BootLoader定义及两种操作模式:BootLoader是系统加电后首先运行的一段程序代码。模式:“启动加载”模式和“下载”模式,这种区别对于开发人员才有意义。
地址重映射:当一个系统上电后程序将自动从0 地址处开始执行,因此在系统的初始状态,必须保证在0 地址处存在正确的代码,因此,有的系统便提供一种灵活的地址重映射方法,可以把0 地址重新指向到RAM 中去。
在ARM ADS环境中,提供了一套系统级的呼叫机制。IMPORT _ _main B _ _main
_ _main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()函数。
1.假设R0的内容为0x8000,寄存器R1和R2的内容分别为0x01和0x10,存储器内容为空。请分指令回答,执行下述指令后,PC有何变化?存储器和寄存器内容如何变化?
STMIB R0!, {R1, R2} LDMIA R0!, {R1, R2}
PRE
mem32[0x××××]=空
r0=0x8000, r1=0x01,r2=0x10
执行指令: STMIB r0!, {r1,r2} (执行前增加)
POST
pc=pc+4
r0=0x8008
r1=0x01
r2=0x10
执行指令: LDMIA r0!, {r1,r2} (执行后增加)
POST
pc=pc+4
r1=0x10,
r2=?? (0x800C单元对应的内容)
r0=0x8010

2.编写一个ARM汇编子程序,实现从存储器某处拷贝一个字符串到存储器另一处。源字符串开始地址放入R1,长度(以字节为单位)放入R2,目的字符串的开始地址放入R3
ADD R2 , R1 , R2
loop
LDMIA R1! , {R4-R13}
STMIA R3! , {R4-R13}
CMP R1 , R2
BNE loop
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: