Chinaunix首页 | 论坛 | 博客
  • 博客访问: 973820
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类:

2010-03-17 22:08:55

答:1、EB44B0开发板的链接脚本文件在哪里?
在开发板光盘的src\targets\demoprogldscript文件中。
2、EB44B0开发板的命令脚本文件在哪里?
在开发板光盘的src\targets\ EB44B0_load.csf文件中。
3、EB44B0开发板上电后超级终端没有打印信息?
请按照如下步骤进行检查:
1) 连接串口0(不要接错)到PC的串口。
2) 启动并正确配置超级终端,MTTTY的设置请参考用户手册,如果使用Windows超级终端,请按照如下配置:
 
3) 目标板上电,在超级终端或者MTTTY中可以看到BootLoader启动信息;
4) 如果先上电然后打开超级终端,请在超级终端中输入回车键,将看到启动信息;
5) 如果仍然没有启动信息,则目标板的BootLoader已经被擦除,必须使用仿真器重新烧写BootLoader。
4、MTTTY是什么,使用Windows的超级终端可以吗?
在EB44B0开发板中,我们在BootLoader的程序烧写过程中通过串口下载数据,因此,如果要通过BootLoader烧写flash必须使用MTTTY,如果仅仅用于交互目的也可以使用Windows的超级终端。
5、EB44B0如何烧写flash?
两种方式:
1) 使用BootLoader的flash烧写功能,具体使用请参考用户手册,请注意小心烧写BootLoader部分,如果BootLoader被烧写,而烧写的程序又不能够运行,则必须使用第二种方法进行烧写;
2) 使用flash编程器进行烧写:
使用Debug菜单的Flash Programmer菜单项,将弹出flash编程器对话框。
 
设置请参照上图,其中Sector From表示操作起始扇区,从1开始。To表示操作结束扇区,从1开始。
编程方法为:
正确设置以后先点击Erase按钮擦除flash,然后点击Program按钮编程flash。
在EB44B0开发板中的flash空间分配可以参照用户手册或者查看BootLoader启动信息的提示,如下图所示:
 
6、EB44B0 BootLoader擦除后程序不能正常下载运行?
EB44B0中BootLoader擦除后必须做命令脚本,请检查工程设置对话框中的Debug选项,加上Command Script。然后重新连接、下载。
 
7、我修改了BootLoader以后,通过仿真器下载到目标板,但是运行结果没有变化,还是运行的Flash中的BootLoader,请问是怎么回事?
在BootLoader的工程设置对话框的Assemble页中,有一个Predefines编辑框,去掉该框中的宏定义,然后点击OK,重新编译、连接下载、运行。
该宏用于设置BootLoader中是否从Flash中拷贝代码到SDRAM中,如果通过调试器下载到目标板则不能使用该宏定义,如果需要做烧写到flash中的代码则必须选择该宏,该宏定义在romstart.s文件中使用。
 
8、怎样制作binary文件?
通过ADT IDE编译生成的elf文件为调试格式文件,不能直接下载运行或者烧写到flash中运行,必须制作相应的binary文件,方法为:
1)编译工程,如果成功。
2)选择tools下面的elf to binary菜单,将自动在相应的debug目录下生成.bin文件,该文件为binary文件。
3) 或者在dos命令行使用ADT1000\bin目录下的elf2bin和arm-elf-objcopy工具:
elf2bin test.elf test.bin   或者
arm-elf-objcopy –O binary test.elf test.bin


9、如何编写代码在flash中,变量在ram中的链接脚本。
问:在一个项目中,我们的系统(1M Flash, 128K Ram, uc/osII)需要在Flash中执行。但是连接脚本总不正确,请问因该如何编写才能实现代码和常数在flash中,变量在ram中的目的?
答:参照如下编写链接脚本文件,其中0地址为flash,0x0C000000为SDRAM。
SECTIONS
{
. = 0x000000;
.text : { *(.text) }
Image_RO_Base = .;
.rodata : { *(.rodata) }
Image_RO_Limit = .;
. = 0x0c000000;
Image_RW_Base = .;
.data : { *(.data) }
Image_RW_Limit = .;
Image_ZI_Base = .;
.bss : { *(.bss) }
Image_ZI_Limit = .;
__bss_start__ = .;
__bss_end__ = .;
__EH_FRAME_BEGIN__ = .;
__EH_FRAME_END__ = .;
PROVIDE (__stack = .);
end = .;
_end = .;
.debug_info     0 : { *(.debug_info)  }
  .debug_line 0 : { *(.debug_line)  } 
    .debug_abbrev   0 : { *(.debug_abbrev)}
    .debug_frame    0 : { *(.debug_frame) }
}
问:曾经试过,但这样编译后进行elf2bin会产生一个192M大的bin文件。bin文件包含 0x00000000到0x0c000000+sizeof(.text)+sizeof(.data)+sizeof(.bss) 范围的全部内存映射。
答:在DOS命令行下使用如下批处理制作binary文件
arm-elf-objcopy -O binary --remove-section=.data bootloader.elf bootloader.code
arm-elf-objcopy -O binary --only-section=.data bootloader.elf bootloader.date
copy bootloader.code /b + bootloader.date /b bootloader.bin
rem del bootloader.code
rem del bootloader.date


10、EB44B0 LCD显示函数PutPixelColor
问:
正在用eb44b0的板来实现把视频流数据转换为能在屏上显示的格式。在看你们的程序的过程中,遇到一些不太明白的地方,希望您能帮助解答:
void _PutPixelColor(U32 x,U32 y,U8 c)
{
    if(x        frameBuffer256[(y)][(x)/4]=( frameBuffer256[(y)][x/4] & ~(0xff000000>>((x)%4)*8) )
            | ( (c)<<((4-1-((x)%4))*8) );
}
答:
显示采取填写显示缓冲区的方式,显示器上一个点在显示缓冲区中用一个字节表示,显示缓冲区由frameBuffer256定义,frameBuffer256为一个int型的数组,一个int型是四个字节,其两维分别表示屏上一行、一列,因此填写缓冲区对于(x,y)坐标点就是填写frameBuffer256[(y)][(x)/4]的数据,因为是int型所以要除以4,而且在填写缓冲区时只能填写其相应的字节,不能影响其它位,对应在其中的位就是从高位到低位数第x%4(第几个像素点)位,%位取余。具体操作时先将该位清零,|以前就是做这个动作,|以后才是赋值,注意加了4-1是从低位到高位的原因。


11、EB44B0超级终端设置问题
问:44B0板在2000的超级终端下可以看到bootloader的界面,但是选择时按键没有响应,是怎么回事。谢谢!用MTTTY时可以响应按键,另外在Linux下用minicom也存在这个问题。
答:这是由于设置了硬件流控造成的,请在相关设置中将硬件流控设置为无。


12、有关romstart.s 中的几个问题想问一下版主
问:
1、romstart.s 中有个main符号,用在 BL main 和ldr pc,=main
    但是main在romstart.s 中未定义,也没有象Image_ZI_Base一样
                .extern Image_ZI_Base
   不知是如何引用的?
2、main符号地址是0x0c701348,指向bootloader.c的Main函数,可为何ldr pc,=main它却跳转到UserProg_Start函数

3、请问在将code从flash copy 到RAM以后,是如何设置使下次复位时从ram里开始程序呢?

4、我看到ramstart.s中有各个异常的跳转,如HandlerFIQ等,可romstart.s中却没有,
那么ramstart.s和romstart.s到底有何不同,我要将bootload重新写进flash的话,用哪一个呢?
答:
1、 main定义在c语言中,在bootloader中就是bootloader.c
2、
2、 不是设置下一次复位从ram运行,而是紧接着下一条,ldr pc, =startram指令跳转到ram执行
3、 要烧写进flash,请使用romstart.s文件,ramstart.s为调试时使用的,用它编译的程序必须使用调试器下载或者由bootloader加载
问:
1、romstart.s中的main没有用.extern main定义,难道可以直接引用?
2、"main符号地址是0x0c701348,指向bootloader.c的Main函数,可为何ldr pc,=main它却跳转到UserProg_Start函数",这句的意思是说我现在调试bootloader工程,用的是romstart.s文件,可执行到最后一句ldr pc,=main时,却跳到bootloader.c的UserProg_Start()函数里,而不是跳转到main()里,是何原因呢?
答:
1、可以,可能会有一些warnning吧
2、因为你在romstart.s文件中有一段拷贝代码,将代码从flash拷贝到sdram中,因此,拷贝完成后实际上运行的还是从flash中拷贝上来的代码,而不是你下载调试的代码,此时自然和你程序走得路线会有差别,不知这样说清楚没有。在调试的时候请将romstart.s换成ramstart.s,然后编译、调试
问:
按版主的说法,我理解是:一开始是从flash中远行程序,romstart.s文件将代码从flash拷贝到sdram后,用ldr pc, =startram指令跳转到ram执行
这样就有个问题是:我由ADT1000 TOOLs里的get symbols得到的Bootloader_sym.txt文件中得到ResetHandler =0c700020,startram=0c700228
如果说因为startram=0c700228使得指令跳转到RAM的话,那么选用romstart.s文件将bootloader代码烧写入flash0x0000地址之后,复位时从0x000000开始,此时第一句代码是    B       ResetHandler 
而ResetHandler =0c700020,是在RAM区域内,难道说从这里就开始跳转了?不知这是怎么回事,
答:
这就是相对跳转和绝对跳转,建议看一下b以及ldr的语法。
b 指令是相对跳转指令,它以偏移作跳转,也就是他会跳转到其后0x0c7000228-0x0c700020位置处,而不会直接跳转到sdram。但是如果使用ldr pc, =xxx的话就是绝对跳转。


13、有关串口超级终端设置产生的问题
问:
我用IDE上的flash program 写bootload.bin,用的bin文件是光盘自带的,flash program的设置如FAQ一般设置。可写完,加电之后,在MTTY串口程序中不断的有bootload的启动信息提示,但是其中有些字符是错的,如有一行:
*[Block 5] ramdisk   -----0x        只写到0x就结束了,如此等待,就是说有启动信息,但是不全或有错字,而且这个启动信息不断出现。
该如何解决?
答:
串口设置有没有问题呀,正常情况下如果串口没有输入是不会动作的。请注意将硬件流控关闭

阅读(530) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~