答: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就结束了,如此等待,就是说有启动信息,但是不全或有错字,而且这个启动信息不断出现。 该如何解决? 答: 串口设置有没有问题呀,正常情况下如果串口没有输入是不会动作的。请注意将硬件流控关闭
完整的说明及相关图片请参考:
|