本帖最后由 悠悠三千载 于 2019-5-17 15:14 编辑
用的是rtthread 系统,问题出现在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 != ' ')
{
/* 换行 */
if(*str == '
')
{
USART_SendData(HC05_USARTx, '
');
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) == '
')
{
Usart_SendByte(HC05_USARTx, '
');
}
}
while(*(str + k) != ' ');
/* 等待发送完成 */
while(USART_GetFlagStatus(HC05_USARTx, USART_FLAG_TXE) == RESET);
/* 退出临界段 */
rt_exit_critical();
}
[/mw_shl_code]
这是为什么呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>