打印
[ZLG-ARM]

semihosting机制调用printf()输出的问题!

[复制链接]
3530|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
roophoon|  楼主 | 2007-3-2 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是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()输出?最好那些大虾能给我个例程,万分感激!

相关帖子

沙发
roophoon|  楼主 | 2007-3-3 08:34 | 只看该作者

没人会么?

哪位大虾会的,指教一下!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

1

粉丝