大学生
最后登录1970-1-1
在线时间 小时
注册时间2016-3-29
|
在使用rt_kprintf是出现了一个奇怪的问题:
当这样写时,rt_kprintf打印出问题,只能打印最后一个字符,这个写法也是火哥原版的
[mw_shl_code=c,true]void rt_hw_console_output(const char *str)
{
unsigned int k = 0;
/* 进入临界段 */
rt_enter_critical();
/* 直到字符串结束 */
while(*str != '\0')
{
/* 换行 */
if(*str == '\n')
{
USART_SendData(HC05_USARTx, '\r');
while(USART_GetFlagStatus(HC05_USARTx, USART_FLAG_TXE) == RESET);
}
USART_SendData(HC05_USARTx, *str++);
while(USART_GetFlagStatus(HC05_USARTx, USART_FLAG_TXE) == RESET);
}
/* 退出临界段 */
rt_exit_critical();
}
[/mw_shl_code]
改成这样写后,就正常了
[mw_shl_code=c,true]void rt_hw_console_output(const char *str)
{
unsigned int k = 0;
/* 进入临界段 */
rt_enter_critical();
do
{
Usart_SendByte(HC05_USARTx, *(str + k));
k++;
/* 换行 */
if(*(str + k) == '\n')
{
Usart_SendByte(HC05_USARTx, '\r');
}
}
while(*(str + k) != '\0');
/* 等待发送完成 */
while(USART_GetFlagStatus(HC05_USARTx, USART_FLAG_TXE) == RESET); // 在这一行,软件总是提示一个警告,conparison of constant 30 with expression of TYPE ‘FlagStatus’ is alway false,消除不了
/* 退出临界段 */
rt_exit_critical();
}
[/mw_shl_code]
这是什么问题呢?
|
|