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’的时候,串口助手显示的是:
请帮我看看应该怎么修改我的代码或者配置,谢谢各位!