裸机代码(uboot) : clear bss】的更多相关文章

一. bss介绍: 代码中函数.变量.常量 / bss段.data段.text段 /sct文件..map文件的关系[实例分析arm代码(mdk)] bss和data的区别: 全局的未初始化变量存在于.bss段中,具体体现为一个占位符: 全局的已初始化变量存于.data段中: .bss是不占用.exe文件空间的,其内容由操作系统初始化(清零): 而.data却需要占用,其内容由程序初始化. 若这样定义一个全局变量:] ; 则它在.bss段,这里占用占位符的空间. 若这样定义一个全局变量:] ={,…
linux上使用J-Link调试S3C2440裸机代码 工具: segger的jlink仿真器 segger的jlink for linux 交叉编译工具链里面的arm-xx-linux-xx-gdb 初始化脚本 工具安装 segger的jlink for linux 进入Segger官网--->Download--->J-Link/J-Trace--->J-Link Software and Documentation Pack.有deb.rpm.tgz三种包可供选择,随便选一个,我选…
1.代码重定位的改进 用ldr.str代替ldrb, strb加快代码重定位的速度. 前面重定位时,我们使用的是ldrb命令从的Nor Flash读取1字节数据,再用strb命令将1字节数据写到SDRAM里面. 我们2440开发板的Nor Flash是16位,SDRAM是32位. 假设现在需要复制16byte数据. 不同的读写指令 cpu读取nor的次数 cpu写入sdram的次数 ldrb.strb 16 16 ldr.str 8 4 可以看出我们更换读写指令后读写次数变少了,提升了cpu的访…
近日在调试uboot时,发现了一个现象,即在relocate_code前如果给未初始化或者初始化值为0的变量赋值的话,则在relocate_code后程序无法正常执行.经过学习,恶补如下知识 BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域.数据段属于静态内…
代码重定位(2.编程实现代码重定位) 1.引入链接脚本 我们上一节讲述了为什么要重定位代码,那么怎么去重定位代码呢? 上一节我们发现"arm-linux-ld -Ttext 0 -Tdata 0x30000000"这种方式编译出来的bin文件有800多M,这肯定是不行的,那么需要怎么把.data段重定位到sdram呢? 可以通过AT参数指定.data段在编译时的存放位置,我们发现这样指定太不方便了,而且不好确定要放在bin文件的哪个位置.这里就要引入链接脚本,它可以帮我们解决这个不必要…
1.重定位的引入(为什么要代码重定位) 我们知道s3c2440的cpu从0地址开始取指令执行,当从nor启动时,0地址对应nor,nor可以像内存一样读,但不能像内存一样写.我们能够从nor上取指令执行. 例子1:当nand启动的时候,我们nand中的前4K指令会变自动加载到sram中去,这时的0地址对应sram. 那么我们的程序如果大于4K,要从nand启动,sram只拷贝了nand中的前4K代码,那么如何解决这个问题呢? 那么就需要重定位代码到sdram中去,sdram的容量较大,又可以直接…
10.找到STM32cubeMx所建的工程目录,在工程目录的同级目录下新建一个文件夹用来存放自己写的代码 11.用notepad++打开keil的工程文件,在这里的<Group>前面加上 <Group> <GroupName>刚才新建的文件夹的名字</GroupName> </Group> 这样用keil打开工程文件,就可以看到一个以新建的文件夹的名字命名的文件组了 12.添加一个userLogic.c文件 里面引出两个函数 void vUser…
1.打开STM32CubeMX,New project 选好自己要用的芯片 2.选上左侧SYS中的debug Serial Wire(定义烧程序的端口) . 3,选上左侧TIM6,使TIM6可用(TIM6只有基本功能用来当时间片轮调的时基,不会有什么pwm功能冲突问题) 4.选一下时钟配置 5.TIM6的周期改一下,如果是48MHZ的频率就改48000-1好了,这样1ms进入一次中断 不要忘了把TIM6的中断也勾上 6.然后就是各种选项目里用到的资源了 7.中断统一再配置一下,原则就是TIM6中…
1.nand flash烧写uboot 并且启动nandflash uboot,用来初始化6410,进入uboot命令行界面 2.在terminal中输入JLinkGDBServer -device ARM11 3.设置eclipse中的debug配置 其中初始化的部分是这样的 # tiny6410_config# connect to the J-Link gdb servertarget remote localhost:2331# Set JTAG speed to 30 kHzmonit…
开发板EasyARM i.MX280A CPU:arm926ejs helloworld程序使用的编译器 (1)arm-fsl-linux-gnueabi-gcc  version gcc4.4.4 glibc2.11 (2)arm-linaro-linux-gnueabihf-gcc version gcc4.7.3 gblic2.19 (3)arm-none-linux-gnueabi-gcc version gcc4.4.4 glibc2.18 helloworld程序的编译方式简单ubo…