7074|4

85

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教:CC里可以调用printf函数吗? [复制链接]

我看书上的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函数?

最新回复

因为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
 
点赞 关注

回复
举报

87

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

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

把SECTION中的B0换成DATA,也就是说吧.BSS分配到大一点的空间。试试!
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

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

不好意思,这个我也不太清楚,
请教walker吧,他可能知道
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 

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

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

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复:回复:回复:请教: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)
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 2/10 下一条
ADI 探索季,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道!
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表