[ZLG-ARM] semihosting机制调用printf()输出的问题!

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

没人会么?

哪位大虾会的,指教一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

3

主题

10

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部