现在的位置: 首页 > 综合 > 正文

在CCS中使用printf函数输出的问题和解决过程

2013年07月29日 ⁄ 综合 ⁄ 共 1269字 ⁄ 字号 评论关闭

在编写程序时,使用printf函数将一些参数显示出来对于调试程序很有用,但是初次在CCS中使用Printf函数时却遇到了一些问题,下面将这些问题的解决过程贴出来,虽然不能准确的指出问题所在,但是可以保证成功的用printf函数实现屏幕输出,希望对大家有用。
问题出现:

我用的是瑞泰的F2812的开发板,使用的是例程里的Cprogram程序,当时在调试IQmath程序的例程时,里面有用printf软件实现屏幕输出
的语句,但我在Cprogram中加入这些语句时编译时却出现以下警告“warning: creating output section .cio
without SECTIONS
specification”,运行程序也没有实现输出。虽然我不很明白.ico段到底有什么用,我还是在Cprogram.cmd文件中加入了这个段的
分配空间语句,不过编译之后,虽然没有出现上述警告,输出依然没有实现。
问题解决:

接下来我将Cprogram.cmd文件替换为IQmath例程的配置文件IQmath.cmd,虽然还有警告“warning: creating
output section .cio without SECTIONS
specification”,但可以成功实现输出,但前提是工程中的库文件必须选择rts2800_ml.lib而不是rts2800.lib。这样我
就开始对比两个cmd文件的不同,没有大的区别,于是我就开始几乎是一条语句一条语句的进行改变,然后调试,最后发现对段定义的改动根本对问题的产生没有
关系,最后只好改变-heap选项和-stack选项,发现问题就出在-heap选项上,在IQmath.cmd文件里并没有使用-heap选项,所以编
译时采用的是默认的400h,Cprogram.cmd中定义的heap大小是100h,我将100h改为400h后就好使了,实现了屏幕输出。改变
-stack的大小对于实现输出功能并没有影响。值得注意的是在cmd文件中如果要写注释语句的时候,最好使用“/*...*/”注释符,而不要用“
//”注释符,在平时编写C程序调试时,经常在某个语句前加上“//”而使该语句失效,要用到时将“//"去掉即可,非常方便,但用在cmd文件的
-stack选项或-heap选项之前时却出现下面错误提示“error: system error, can't open file
'/.obj' for input:
No”,改用“/*...*/”注释符时却不存在这个问题。(“//”用在段分配语句如.text前时却并不出现上述错误提示。
总结:

由以上查找问题的过程,我得到了下面几点结论:
1、要实现printf函数功能,cmd文件的-heap大小设为400h或不写,使用默认;(大小设为其他值我没有试过)
2、库函数使用rts2800_ml.lib而不是rts2800.lib;
3、.cio的指定与否与输出显示与否没有直接关系;
4、在cmd文件中应避免使用“//”注释符,可以使用“/*...*/”注释符;
5、在CCS中使用printf函数可以输出显示中文。

抱歉!评论已关闭.