我用的是EasyARM2210,使用semihosting机制调用printf(),出现如下问题,求解。
我编写了一个最简单的测试程序: #include "stdio.h" //只在使用zlg模板时加上这句 int main() { printf("Hello!/n"); return(0); }
1、使用默认设置,RO设为0x8000,在ARMulator中调试,在AXD的console窗口可以看到正确的输出结果; 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”这一项? 3、接着我又利用zlg的模板,包含了“stdio.h”头文件,另外说明的是,模板中原来是禁止semihosting的,所以我把starup.s文件中的“IMPORT __use_no_semihosting_swi”这一句去掉了。出现了如下一系列错误:
Error : L6200E: Symbol _sys_close multiply defined (by sys_io.o and target.o). Error : L6200E: Symbol _sys_write multiply defined (by sys_io.o and target.o). Error : L6200E: Symbol _sys_read multiply defined (by sys_io.o and target.o). Error : L6200E: Symbol _sys_istty multiply defined (by sys_io.o and target.o). Error : L6200E: Symbol _sys_seek multiply defined (by sys_io.o and target.o). Error : L6200E: Symbol _sys_ensure multiply defined (by sys_io.o and target.o). Error : L6200E: Symbol _sys_flen multiply defined (by sys_io.o and target.o). Error : L6200E: Symbol __semihosting_swi_guard multiply defined (by use_semi.o and use_no_semi.o).
之前我已经看过semihosting机制,我猜想是不是我应该重写其中的某些函数,但改哪些如何改我还不知道。因此,我的问题是如何改正以上错误?在工程模板下实现带semihosting机制(在AXD的console中输出)和不带semihosting(通过UART口输出)的printf()输出?最好那些大虾能给我个例程,万分感激!
|