ICCAVR编译器中的MALLOC函数有问题还是单片机有问题啊?
我的程序大致是这样的:void UART1_TX_Interrupt(void)
{
if(cSendData!=0)
{
UDR1=cSendData;
cSendIndex++;
}
}
void TxUART1Data( char *pData )
{
char i;
for(i=0;i<20;i++)
{
cSendData=pData;
if(cSendData==0) break;
}
UDR1=cSendData;
cSendIndex=1;
}
void UART1DataControl( void )
{
//void *malloc(size_t);
char *pData;
pData=malloc(13*sizeof(char));
pData='a';
pData='b';
pData='c';
pData='d';
pData='e';
pData='f';
pData='g';
pData='h';
pData='i';
pData='j';
pData='
';
pData='\r';
pData=0;
TxUART1Data(pData);
free(pData);
}
void main( void )
{
InitDevices();
while(1)
{
if(cTime>=100)//1秒
{
cTime=0;
UART1DataControl();
}
Delay1ms();
}
}
结果,通过超级终端收到的是abbdefghij,而不是我要的abcdefghij,让我百思不得其解,谁能告诉我是怎么回事?
我把第二个字符改为别的,结果第三个字符跟着第二个字符一样显示
-----此内容被robby007于2006-12-28,12:04:00编辑过
-----此内容被robby007于2006-12-28,12:04:47编辑过 晕。。。,难道我发的问题很高深??? 找到答案了,原来是ICC编译器的问题,我后来改用GCC编译器,同样的代码,它的结果就符合我的要求,谢天谢地!
我后来做了几个程序没用到MALLOC,只是结构里包含结构的那种,结果ICC编译出来在单片机里跑就是出问题,比如做以太网实验的时候我设置不同的栈空间,它给我发出的IP地址就不一样,而且是随机的,而用GCC就没有这个问题,看来以后写一些复杂一点的程序的话最好还是用GCC编译器了。
页:
[1]