我用的是EasyARM2210,使用semihosting机制调用printf(),出现如下问题,求解。<br /><br />我编写了一个最简单的测试程序:<br /> #include "stdio.h" //只在使用zlg模板时加上这句<br /> int main()<br /> {<br /> printf("Hello!/n");<br /> return(0);<br /> }<br /><br />1、使用默认设置,RO设为0x8000,在ARMulator中调试,在AXD的console窗口可以看到正确的输出结果;<br />2、如果我更该默认设置,RO=0X80000000,RW=0X80000500(之所以这样设置,是因为我想在EasyARM2210上调试,上面这一段看似很小的代码,编译下来的17k多,片内RAM装不下),使用ARMul调试的时候提示“out of heap momory”,我查了一下,说是要设置“$TOP_OF_MOMORY”,可是在我在AXD中打开system view->Debug Inetrnal,里面根本没有“$TOP_OF_MOMORY”,请问出错原因以及如何查看更改“$TOP_OF_MOMORY”这一项?<br />3、接着我又利用zlg的模板,包含了“stdio.h”头文件,另外说明的是,模板中原来是禁止semihosting的,所以我把starup.s文件中的“IMPORT __use_no_semihosting_swi”这一句去掉了。出现了如下一系列错误:<br /><br />Error : L6200E: Symbol _sys_close multiply defined (by sys_io.o and target.o).<br />Error : L6200E: Symbol _sys_write multiply defined (by sys_io.o and target.o).<br />Error : L6200E: Symbol _sys_read multiply defined (by sys_io.o and target.o).<br />Error : L6200E: Symbol _sys_istty multiply defined (by sys_io.o and target.o).<br />Error : L6200E: Symbol _sys_seek multiply defined (by sys_io.o and target.o).<br />Error : L6200E: Symbol _sys_ensure multiply defined (by sys_io.o and target.o).<br />Error : L6200E: Symbol _sys_flen multiply defined (by sys_io.o and target.o).<br />Error : L6200E: Symbol __semihosting_swi_guard multiply defined (by use_semi.o and use_no_semi.o).<br /><br />之前我已经看过semihosting机制,我猜想是不是我应该重写其中的某些函数,但改哪些如何改我还不知道。因此,我的问题是如何改正以上错误?在工程模板下实现带semihosting机制(在AXD的console中输出)和不带semihosting(通过UART口输出)的printf()输出?最好那些大虾能给我个例程,万分感激!<br /> |
|