[ZLG-MCU] 请问:如何在keil中运用printf函数

[复制链接]
7568|9
 楼主| netmis9979 发表于 2007-6-19 16:08 | 显示全部楼层 |阅读模式
请老鸟们举个例子。<br />我现在keil中只会用P1口看具体结果,很不方便,哪个老鸟指点一下,<br />如何用printf输出一个数组unsigned&nbsp;int&nbsp;a[3]。<br /><br />敬礼。。
zlgmcu 发表于 2007-6-20 08:42 | 显示全部楼层

一般情况下,在keil中调试,我是直接观察相关变量

或相关地址中的数据.<br /><br />这是最简单最有效的方法
masashinakayama 发表于 2007-6-29 12:30 | 显示全部楼层

什么乱七八糟的printf

给你个AT91SAM7S64的东西看看,自己改改把,用前初始化好串口<br /><br />#include&nbsp;&ltstdarg.h&gt&nbsp;//&nbsp;va_list<br />#include&nbsp;&ltstdio.h&gt&nbsp;//&nbsp;vsprintf()<br />#include&nbsp;&quot;..includeAT91SAM7S64.h&quot;<br />#include&nbsp;&quot;..includelib_AT91SAM7S64.h&quot;<br /><br />&nbsp;<br />void&nbsp;SAM_Printf(char&nbsp;*fmt,...)<br />{<br />&nbsp;va_list&nbsp;ap;<br />&nbsp;char&nbsp;string[256],*pt;<br />&nbsp;va_start(ap,fmt);<br />&nbsp;vsprintf(string,fmt,ap);<br />&nbsp;pt=string;<br />&nbsp;while(*pt)<br />&nbsp;{<br />&nbsp;&nbsp;while(!AT91F_US_TxReady(AT91C_BASE_US0));&nbsp;//block&nbsp;until&nbsp;TxReady<br />&nbsp;&nbsp;AT91F_US_PutChar(AT91C_BASE_US0,*pt++);<br /><br />&nbsp;}<br />&nbsp;va_end(ap);<br />}<br /><br />
HQGBOY 发表于 2007-7-2 15:18 | 显示全部楼层

。。。。。

  
HQGBOY 发表于 2007-7-2 15:20 | 显示全部楼层

KEIL :HELLO

/*------------------------------------------------------------------------------<br />HELLO.C<br /><br />Copyright&nbsp;1995-2005&nbsp;Keil&nbsp;Software,&nbsp;Inc.<br />------------------------------------------------------------------------------*/<br /><br />#include&nbsp;&ltREG52.H&gt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;special&nbsp;function&nbsp;register&nbsp;declarations&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;for&nbsp;the&nbsp;intended&nbsp;8051&nbsp;derivative&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br /><br />#include&nbsp;&ltstdio.h&gt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;prototype&nbsp;declarations&nbsp;for&nbsp;I/O&nbsp;functions&nbsp;*/<br /><br /><br />#ifdef&nbsp;MONITOR51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Debugging&nbsp;with&nbsp;Monitor-51&nbsp;needs&nbsp;&nbsp;&nbsp;*/<br />char&nbsp;code&nbsp;reserve&nbsp;[3]&nbsp;_at_&nbsp;0x23;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;space&nbsp;for&nbsp;serial&nbsp;interrupt&nbsp;if&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />#endif&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Stop&nbsp;Exection&nbsp;with&nbsp;Serial&nbsp;Intr.&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;is&nbsp;enabled&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br /><br /><br />/*------------------------------------------------<br />The&nbsp;main&nbsp;C&nbsp;function.&nbsp;&nbsp;Program&nbsp;execution&nbsp;starts<br />here&nbsp;after&nbsp;stack&nbsp;initialization.<br />------------------------------------------------*/<br />void&nbsp;main&nbsp;(void)&nbsp;{<br /><br />/*------------------------------------------------<br />Setup&nbsp;the&nbsp;serial&nbsp;port&nbsp;for&nbsp;1200&nbsp;baud&nbsp;at&nbsp;16MHz.<br />------------------------------------------------*/<br />#ifndef&nbsp;MONITOR51<br />&nbsp;&nbsp;&nbsp;&nbsp;SCON&nbsp;&nbsp;=&nbsp;0x50;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;SCON:&nbsp;mode&nbsp;1,&nbsp;8-bit&nbsp;UART,&nbsp;enable&nbsp;rcvr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;TMOD&nbsp;|=&nbsp;0x20;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;TMOD:&nbsp;timer&nbsp;1,&nbsp;mode&nbsp;2,&nbsp;8-bit&nbsp;reload&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;TH1&nbsp;&nbsp;&nbsp;=&nbsp;221;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;TH1:&nbsp;&nbsp;reload&nbsp;value&nbsp;for&nbsp;1200&nbsp;baud&nbsp;@&nbsp;16MHz&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;TR1&nbsp;&nbsp;&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;TR1:&nbsp;&nbsp;timer&nbsp;1&nbsp;run&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;TI&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;TI:&nbsp;&nbsp;&nbsp;set&nbsp;TI&nbsp;to&nbsp;send&nbsp;first&nbsp;char&nbsp;of&nbsp;UART&nbsp;&nbsp;&nbsp;&nbsp;*/<br />#endif<br /><br />/*------------------------------------------------<br />Note&nbsp;that&nbsp;an&nbsp;embedded&nbsp;program&nbsp;never&nbsp;exits&nbsp;(because<br />there&nbsp;is&nbsp;no&nbsp;operating&nbsp;system&nbsp;to&nbsp;return&nbsp;to).&nbsp;&nbsp;It<br />must&nbsp;loop&nbsp;and&nbsp;execute&nbsp;forever.<br />------------------------------------------------*/<br />&nbsp;&nbsp;while&nbsp;(1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;^=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Toggle&nbsp;P1.0&nbsp;each&nbsp;time&nbsp;we&nbsp;print&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;Hello&nbsp;World
&quot;);&nbsp;&nbsp;&nbsp;/*&nbsp;Print&nbsp;&quot;Hello&nbsp;World&quot;&nbsp;*/<br />&nbsp;&nbsp;}<br />}<br />
 楼主| netmis9979 发表于 2007-7-2 21:51 | 显示全部楼层

日了

这个keil中自带的hello&nbsp;world就是最简单的实现方法??<br />看的似懂非懂。。。<br />到现在也不是很明白<br />难道不能输出一次就停住
HQGBOY 发表于 2007-7-3 08:22 | 显示全部楼层

把死循环去掉,不就一次吗?

&nbsp;//while&nbsp;(1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;^=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Toggle&nbsp;P1.0&nbsp;each&nbsp;time&nbsp;we&nbsp;print&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;(&quot;Hello&nbsp;World
&quot;);&nbsp;&nbsp;&nbsp;/*&nbsp;Print&nbsp;&quot;Hello&nbsp;World&quot;&nbsp;*/<br />&nbsp;//&nbsp;}
su_mj000 发表于 2007-7-4 08:11 | 显示全部楼层

printf () 看起来很有用,似乎也很好用。

其实它的实现非常复杂,且代价昂贵。6楼给出的代码只能涵盖<br />printf()功能的一小部分而已。<br /><br />建议采用2楼的思路自己写一个函数作为调试工具。
masashinakayama 发表于 2007-7-4 08:20 | 显示全部楼层

代价太大了

linux的printk就不支持浮点,我想有两种策略<br />1。仅打印字符串,最简单。楼主<br />2。支持打印整型数据,复杂些,库连接后可能多占1k左右代码,我的程序。<br />3。11楼printf,好像涉及semihost,反正是我是没搞懂,也不想去搞懂library里到底在倒腾个啥。semihost我是从来不用的。<br /><br />
MicroMMU 发表于 2007-7-5 10:36 | 显示全部楼层

一个Printf函数占了起码1-2K的空间。如果用浮点更厉害

您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

10

帖子

0

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