Other Parts Discussed in Thread: MSP-EXP430G2ET
各位好,
我首先在包含了stdio.h和string.h头文件的main函数中对fputc和fputs进行重定义,代码如下:
int fputc(int ch,FILE *f)
{
while(UCA0STAT & UCBUSY);
// UCA0TXBUF = ch;
UCA0TXBUF = ch&0xff;
while(!(IFG2 & UCA0TXIFG));//等待发送完成
return ch;
}
int fputs(const char *_ptr, register FILE *_fp)
{
unsigned int i, len;
len = strlen(_ptr);
for(i=0 ; i<len ; i++){
while(UCA0STAT & UCBUSY);
// UCA0TXBUF = _ptr[i];
UCA0TXBUF = _ptr[i]&0xff;
while(!(IFG2 & UCA0TXIFG));//等待发送完成
}
return len;
}
printf能够输出hello world这样的字符串,但是用到如"%d"等格式符号时就出现了问题。
具体代码如下:
int main(void)
{
int i=0;
uint8_t buff1[4] = {0x00,0x01,0x02,0x03};
uint32_t buff2;
float buff3;
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
InitSystemClock();
InitUART();
buff2 = (((uint32_t)buff1[0])<<24)|
(((uint32_t)buff1[1])<<16)|
(((uint32_t)buff1[2])<<8)|
buff1[3]; //将4个8位数据组合成一个uint32_t的数据,符合原始数据长度
buff3 = (float)buff2;
// UARTSendString(buff1,4);
// for(i=0;i<4;i++)
// {
// UARTSendString(buff1[i],)
// }
// printf("hello world!!");
for(i=0;i<4;i++)
{
printf("buff1[%d] = %x\n",i,buff1[i]);
}
printf("buff2[1] = %u\n",buff2);
printf("buff3[1] = %f\n",buff3);
// printf("i = %d \n",i);
return 0;
}
一开始我对现project的properties中的“level of printf support required”中的设置为'minimal',这个时候通过串口只能够打印出int格式的数,也只会打印一次;
当我把设置改为'full'来满足我需要打印16进制数的要求时,串口不仅一直在打印%前的语句,而且需要打印的16进制数也打印不出来;对于在‘minimal’时能够按要求打印的int格式的数也是一直打印,串口助手打印出来的是这样的:
它好像一直卡在buff1[1]的printf中没有跳到下一步。但如果设置是‘minimal’的时候,串口助手显示的是:
请帮我看看应该怎么修改我的代码或者配置,谢谢各位!