This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

printf函数占用大量内存

程序代码如下:

#include <csl.h>
#include <csl_pll.h>
#include <csl_chip.h>
#include <csl_gpio.h>
#include <csl_gpiohal.h>
#include <stdio.h>

void delay();

/*锁相环的设置*/
PLL_Config  myConfig      = {
  0,    //IAI: the PLL locks using the same process that was underway
                //before the idle mode was entered
  1,    //IOB: If the PLL indicates a break in the phase lock,
                //it switches to its bypass mode and restarts the PLL phase-locking
                //sequence
  24,    //PLL multiply value; multiply 24 times
  1             //Divide by 2 PLL divide value; it can be either PLL divide value
                //(when PLL is enabled), or Bypass-mode divide value
                //(PLL in bypass mode, if PLL multiply value is set to 1)
};



int main(void) {
 printf("enter the program:\n");
//	int i = 0;
//	初始化CSL库
	CSL_init();

//	设置系统的运行速度为144MHz
	PLL_config(&myConfig);

//	确定方向为输出
	GPIO_RSET(IODIR,0xFF);
//	GPIO_RSET(IODATA,0xaa);
	while(1)
	{
		GPIO_RSET(IODATA,~0x01);
		delay();
		delay();
		GPIO_RSET(IODATA,~0x02);
		delay();
		delay();
		GPIO_RSET(IODATA,~0x04);
		delay();
		delay();
		GPIO_RSET(IODATA,~0x80);
		delay();
		delay();
		GPIO_RSET(IODATA,~0x40);
		delay();
		delay();
		GPIO_RSET(IODATA,~0x10);
		delay();
		delay();
		GPIO_RSET(IODATA,~0x08);
		delay();
		delay();
	}
}

void delay()
{
	Uint32 j = 0,k = 0;
	for(j = 0;j<0x0c;j++)
	{
		for(k= 0;k<0xffff;k++)
		{}
	}
}

对于代码中标记的那行,写与不写占用的内存如下图

cmd文件如下:

MEMORY
{
    PAGE 0:

        MMR     : origin = 0000000h, length = 00000c0h
        SPRAM   : origin = 00000c0h, length = 0000040h
        VECS    : origin = 0000100h, length = 0000100h
        DARAM0  : origin = 0000200h, length = 0003E00h
        DARAM1  : origin = 0004000h, length = 0004000h
        DARAM2  : origin = 0008000h, length = 0004000h
        DARAM3  : origin = 000c000h, length = 0004000h

        SARAM0  : origin = 0010000h, length = 0004000h
        SARAM1  : origin = 0014000h, length = 0005000h
        SARAM2  : origin = 0019000h, length = 0003000h
        SARAM3  : origin = 001c000h, length = 0004000h
        SARAM4  : origin = 0020000h, length = 0004000h
        SARAM5  : origin = 0024000h, length = 0004000h
        SARAM6  : origin = 0028000h, length = 0004000h
        SARAM7  : origin = 002c000h, length = 0004000h
        SARAM8  : origin = 0030000h, length = 0004000h
        SARAM9  : origin = 0034000h, length = 0004000h
        SARAM10 : origin = 0038000h, length = 0004000h
        SARAM11 : origin = 003c000h, length = 0004000h
        SARAM12 : origin = 0040000h, length = 0004000h
        SARAM13 : origin = 0044000h, length = 0004000h
        SARAM14 : origin = 0048000h, length = 0004000h
        SARAM15 : origin = 004c000h, length = 0004000h

        CE0     : origin = 0050000h, length = 03b0000h
        CE1     : origin = 0400000h, length = 0400000h
        CE2     : origin = 0800000h, length = 0400000h
        CE3     : origin = 0c00000h, length = 03f8000h

        PDROM   : origin = 0ff8000h, length = 07f00h
   /*   VECS    : origin = 0ffff00h, length = 00100h */ /* reset vector */

}


SECTIONS
{
        vectors  : {} > VECS   PAGE 0         /* interrupt vector table */
        .cinit   : {} > SARAM0 PAGE 0
        .text    : {} > SARAM1 PAGE 0
        isrs     : {} > SARAM2 PAGE 0

        .stack   : {} > SARAM4 PAGE 0
        .sysstack: {} > SARAM4 PAGE 0
        .sysmem  : {} > SARAM5 PAGE 0
        .data    : {} > SARAM3 PAGE 0
        .bss     : {} > SARAM3 PAGE 0
        .const   : {} > SARAM6 PAGE 0

        .cio     : {} > SARAM6 PAGE 0
        .csldata:  {} > SARAM7 PAGE 0
}

所以,请问为何printf函数为何会占用这么多的内存?