请教:CC里可以调用printf函数吗?

shuimiao11   2004-3-25 01:45 楼主
我看书上的C语言例程是调用了printf函数的。
但我编的一个小程序里却因为调用了printf函数,而链接不成功。

我的程序框架是这样的:
#include "regs2407.h"
#include "stdio.h"

void main(void)
{
        ……        ;初始化                                
        int i,j, c;
        i = 1;                                  
        j = 2;
        c = i+j;
        printf("%d", c);
}
cmd文件:
MEMORY
{
    PAGE 0 :   VECS   : origin =    0h , length =   040h   /* VECTORS */
               PROG   : origin =   40h , length = 0FFC0h   /* PROGRAM */

    PAGE 1 :   MMRS   : origin =    0h , length =   060h   /* MMRS    */
               B2     : origin = 0060h , length =   020h   /* DARAM   */
               B0     : origin = 0200h , length =  0100h   /* DARAM   */
               B1     : origin = 0300h , length =  0100h   /* DARAM   */
               DATA   : origin = 8000h , length =  8000h   /* XDM     */
   

}

SECTIONS
{
        .text        :{}> PROG PAGE 0
        .cinit        :{}> PROG PAGE 0       
        .data        :{}> DATA PAGE 1
        .stack        :{}> DATA PAGE 1
        .bss        :{}> B0   PAGE 1
        .vectors:{}> VECS PAGE 0
}
注:cmd文件不是我自己写的,是从ti上下的例程中照搬过来的。
但build时编译器总是出现这样的错误提示:
>> cannot allocate .bss in B0 (page 1)
>> errors in input - SumTest.out not built
Build Complete,
  2 Errors, 0 Warnings.
把printf注释掉编译就通过了。
请问各位高手,这是什么原因?究竟能不能调用printf函数?

回复评论 (4)

回复:请教:CC里可以调用printf函数吗?

把SECTION中的B0换成DATA,也就是说吧.BSS分配到大一点的空间。试试!
点赞  2004-3-25 10:26

回复:回复:回复:请教:CC里可以调用printf函数吗?

不好意思,这个我也不太清楚,
请教walker吧,他可能知道
点赞  2004-3-25 23:56

回复:回复:请教:CC里可以调用printf函数吗?

我试过了,确实如你所言。
可是,您能告诉我为什么吗?调用printf与.bss的大小有什么关系?.bss块不是给全局变量和静态变量分配空间的吗?为什么又涉及到printf的调用?
多谢指点!
点赞  2004-3-26 00:21

回复:回复:回复:请教:CC里可以调用printf函数吗?

因为printf函数本身需要用一些变量,它还需要调用其他一些函数,这些函数也需要用一些变量,大致有下面这些,你可以从你的.map文件中看到.

                  000029f7    00000003               : printf.obj (.bss)
                  000029fa    0000008d               : _printfi.obj (.bss)
                  00002a87    00000001               : atoi.obj (.bss)
                  00002a88    00000101               : ctype.obj (.bss)
                  00002b89    000001cd               : defs.obj (.bss)
                  00002d56    00000068               : ecvt.obj (.bss)
                  00002dbe    00000068               : fcvt.obj (.bss)
                  00002e26    00000001               : fputc.obj (.bss)
                  00002e27    00000002               : fputs.obj (.bss)
点赞  2004-3-26 00:21
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复