S3c2410软件调试总结

2009-05-13 12:07:19来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


S3c2410软件调试总结
7、8月份的时候自己用空余时间制作了一块S3c2410+Cyclone
EP1C6的开发版,由于没有时间就一直扔在那里,最近空了下来,我用了3个星期的时间埋头对开发板对了全面的调试,我的工作重点是放在
bootloader、ucos-ii等相对比较简单的程序,借此来完成对硬件模块的测试以及对S3c2410的熟悉。
    很高兴,现在各个模块已经全部打通,我个人自己写的Nor Flash bootloader、Nand Flash bootloader、ucos-ii移植代码、网络驱动以及修改的2410test程序包都顺利跑起来了。
    本着和大家熟悉以及互相交流学习的目的,我想把我这3个星期以来的调试总结和大家共享。虽然相对来说都是比较简单的东西,但是我觉得这些东西对于帮助我们认识嵌入式系统、熟悉ARM还是很有用的,特别是对初学者来说。
我的文章中有任何不妥或者错误的地方,希望大家能够指正! 随时欢迎各位嵌入式爱好者和我联系:
yantouxie@163.com
目录:
S3c2410软件调试总结(一) 硬件平台介绍
S3c2410软件调试总结(二) ADS下C语言的入口方式和ROM镜像文件的生成
S3c2410软件调试总结(三) 2410启动代码分析
S3c2410软件调试总结(四) Nor Flash Bootloader
S3c2410软件调试总结(五) Nand Flash Bootloader
S3c2410软件调试总结(六) RTL8019调试心得
S3c2410软件调试总结(七) S3c2410 DMA介绍
ADS下C语言的入口方式和ROM镜像文件的生成
这部分介绍下ADS下如何生成可以运行的ROM镜像文件,我们知道当程序下载到flash中运行的时候,对于RW、ZI数据就存在着两个环境,一个
load环境,一个是exec环境,有时候由于速度的需要RO数据也要重新加载,那么对RO数据也是有两个环境。编译器产生ROM镜像文件时候,这三块数
据的存放依次为RO、RW、ZI,并且地址空间时连续的。但是到了运行的时候,RW数据必须被拷贝到SDRAM(SRAM)中以支持读写,这就是我们所谓
的运行环境。那么就要有一段代码去完成这个任务,在本章中我们介绍如何生成这段代码。
玩过2410的朋友都知道2410初始化代码中有一段搬运RW和ZI初始化的代码,没错,它确实能够在一定程度上完成上面所说的任务,只要我们在生
成二进制可执行代码的时候在编译器链接项的地方填写正确的RO&RW地址,(比如RO = 0, RW = 0x30000000), 那么将程序下到
NOR flash的零地址并从nor flash启动,启动代码会将RW&ZI数据弄到0x30000000,程序就能跑起来了。
但是各位有没有想过,怎么把RO代码弄到SDRAM中(有时候这是必须的,比方后面我将提到用nor
flash的bootloader烧写nor
flash)?如果直接设RO=0x30000000,那么这段代码下载到0地址肯定跑不起来,除非是ROPI,这个要求就高了。这里我们有必要从介绍
ADS中规定的C语言入口开始,ADS中从初始化汇编代码跳到main函数有两种方式,main和__main:
1,在__main入口
的模式下,汇编代码的指令为 b  __main,
编译器在跳转到main之前还要作一系列的工作,这其中就包括对运行环境的初始化,在中提到:
copies nonroot(RO&RW) execution regions from load addr to exec
addr, and Zeros ZI region.
借助编译器,我们就可以定义更为复杂的运行环境,这里要用到scatter文件(.scf),比如我们要的目标运行环境是:将启动代码以外的所有代码都
拷贝到SDRAM的初始地址中运行,比且把RW段设在0x30800000,那么对应的scf文件如下:
   
   FLASH 0x0  0x200000
   {

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:freebsd 命令使用大全

下一篇:为Qemu增加一块8139网卡