|
大家在调试时一般用了不少printf函数吧,在keil里怎么用printf,以及怎么重定向输出到串口上大家应该都比较熟悉了。 但在使用printf函数时大家还是小心一些,前几天在调试程序时碰到了在循环里使用printf函数调试导致程序堵死,折腾了好几天,后来问黑金的版主才知道问题出在printf函数上,注释掉就可以了。 这里我贴上一些代码,用自定义的函数替代printf,希望对大家有些帮助。 void cli_puts(char* sz) { /* 这里添加在某串口输出字符串的代码 */ char c; while ((c = *sz++) != 0) { while (USART_GetFlagStatus(UART5, USART_FLAG_TXE) == RESET); USART_SendData(UART5, (uint16_t)c); } } void cli_echo(const char* fmt, ...) { static char sz[1024] = { 0, }; /* 组合使用可变参数以及vsprintf,实现printf */ va_list ap; va_start(ap, fmt); vsprintf(sz, fmt, ap); cli_puts(sz); va_end(ap); } 上述cli_echo函数即可以替代printf函数的功能。 |
好厉害!!!![]() |
| 某些代码是会和printf有冲口 ,具说是用了内置内存管理发生冲突的.今天我也遇到了. |
| 学习一下,一直用的print |
| 一直没用过printf在keil里…… |
| 看看,,,,,,, |
| 学习一下, |
| 不错,顶一下 |
学习学习~~ |
| 哈哈,变相的好做法,不过可以不用自己再写个cli_puts()函数了,直接把sz用print输出即可吧 |
微信公众号
手机版