linux学习笔记-AREA

上传人:dfg****19 文档编号:192758269 上传时间:2023-03-07 格式:DOC 页数:9 大小:114.50KB
收藏 版权申诉 举报 下载
linux学习笔记-AREA_第1页
第1页 / 共9页
linux学习笔记-AREA_第2页
第2页 / 共9页
linux学习笔记-AREA_第3页
第3页 / 共9页
资源描述:

《linux学习笔记-AREA》由会员分享,可在线阅读,更多相关《linux学习笔记-AREA(9页珍藏版)》请在装配图网上搜索。

1、AREAAREA 段名 属性,说明:AREA用于定义一个代码段、数据段或者特定属性的段。如果段名以数字开头,那么该段名需用“|”字符括起来,如|7wolf|,用C的编译器产生的代码一般也用“|”括起来。属性部分表示该代码段/数据段的相关属性,多个属性可以用逗号“,”分隔。常见属性如下:DATA:定义数据段,默认为READWRITE。CODE:定义代码段,默认为READONLY。READONLY:表示本段为只读。READWRITE:表示本段可读写。ALIGN=表达式:对齐方式为2表达式次方,例如:表达式=3,则对齐方式为8字节对齐。表达式的取值范围为0-31。ARM汇编器所支持的伪指令一个汇编语

2、言程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。使用示例:AREA Init, CODE,READONLY该伪指令定义一个代码段,段名为Init,属性为只读。3-4-3 ARM汇编器所支持的伪指令4. CODE16/CODE32CODE16/CODE32说明:CODE16伪操作指示编译器后面的代码为16位的Thumb指令。CODE32伪操作指示编译器后面的代码为32位的ARM指令。在使用ARM指令和Thumb指令混合编程的代码里,可用这两条伪指令进行切换,但注意它们只通知编译器其后指令的类型,并不能对处理器进行状态的切换(涉及ARM状态的切换需使用BX指令。)3-4-

3、3 ARM汇编器所支持的伪指令5. ENTRYENTRY说明:ENTRY用于指定汇编程序的入口。在一个完整的汇编程序中至少要有一个ENTRY,程序中也可以有多个,此时,程序的真正入口点可在链接时指定,但在一个源文件里最多只能有一个ENTRY或者没有ENTRY。使用示例:AREA Init, CODE, READONLYENTRY ;指定应用程序的入口点3-4-3 ARM汇编器所支持的伪指令6. ENDEND说明:“END”告诉编译器已经到了源程序的结尾。二:一直不理解这个GPBDAT10:0是什么意思。原来GPB0共有10个GPBCON,所以10:0,代表10个当中的任意一个。例如GPB3就是

4、对GPBDAT的第三位进行操作。int a;int *p;p=&a;/取a的地址。令p=(int*)0x5600050 ,即a的地址也就是0x56000050。其中对0x56000050加了一个强制转化.(1)*p=a;(2)由(1)(2)得出。*(int*0x56000050)=a;a变量变化。a地址不变,地址还是0x56000050。所以a变化,就是0x56000050地址上的数据发生变化。#define a *0x12 a变量的变化就是地址0x12上面的数据变化。a的地址就是0x12。对数据位的操作。Bit 7 6 0 1 表示输出。以前老是以为弄反。如果gpb3设置为imput 则 二

5、进制0 0 化为十进制为0 则36 就完成了对7 6 设置为00 的操作。按位的操作。 清零 a=a&((14))a&=(14)置1 a|=(14),1.Makefiles上面 变量的定义才有等号。 依赖于目标文件之间是冒号。2.linux上 伪指令的.text代表代码段。3.global为程序定义一个全局的变量。4.src :=$(shell ls *.c)结果为1.c 2.c #define vf 0x56000050*p = vfFor(;i13 ;i+) Pi = mem_cfgiMem_cfg是一个数组。意思是把数组里面的数据放到地址0x56000050上面去。 5.汇编和c语言的参

6、数是用r0.r1,r2来传递的。这一点很重要,但是容易忘记与忽略.假设汇编上r0 传来的是0地址。Void(unsigned char *p) *p意思为*p指向0地址。Val =*p;*p = 0x1234; 即0地址的内容发生了变化。假设传来的为0这个数。Void(int p)则p = 0;另一个指针的用法。Int *p = (int *) 0 次地方加了一个强制转换。 指针变量p指向0地址, p的变化带边0地址内容的变化。 这里的*p是指向的数。留意下p指向变量的用法。Int *p = start start = 5;void copy_code_to_sdram(unsigned ch

7、ar *src, unsigned char *dest, unsigned char *length) int i; if(isBootFromNorflash() while(i 12ns. 100MHZ=HCLK =10ns 10*(TWRPH0+1)12 所以 TWRPK0 = 12.CLEALE发出信号后,持续一段时间,WE信号才可以发生变化。 即tCLS或者tALS-twp TCLS=twp=TALS。即可以同时发出CLE和WE。 所以TASLS = 03.WE变为高电平后,tclh要维持多长时间。Duration = HCLK x ( TWRPH1 + 1 )Tclh5 所以TW

8、RPH1取为0.SECTIONS . = 0x30000000 链接脚本 程序的运行位置 当前地址 . 代表当前地址 .text : *(.text) 在链接脚本0x30000000位置上先存放代码段 .rodata : *(.rodata*) 接着存放只读数据段 .data : *(.data) Bss 段 主要是为了 将一些全局变量统一处理 比如一万个0 .嘿嘿。/main.cpp int a = 0;/a在全局已初始化数据区 char *p1;/p1在BSS区(未初始化全局变量) main() int b;/b在栈区char s = abc;/s为数组变量,存储在栈区,/abc为字符串常量,存储在已初始化数据区char *p1,p2;/p1、p2在栈区char *p3 = 123456;/1234560在已初始化数据区,p3在栈区 static int c =0;/C为全局(静态)数据,存在于已初始化数据区/另外,静态数据会自动初始化p1 = (char *)malloc(10);/分配得来的10个字节的区域在堆区p2 = (char *)malloc(20);/分配得来的20个字节的区域在堆区free(p1);free(p2);Ldr与mov的区别 因为寄存器除了放数字 还要放指令 所以不是所有的数字都可以放的下去 放不下去的的时候就用伪指令 ldr

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!