嵌入式技术论坛
直播中

郑成枝

8年用户 1385经验值
私信 关注
[问答]

求助,rt_hw_console_output重写发送错误怎么解决?

*芯片 HK32103VE
*编译器:keil5
RT_WEAK void rt_hw_console_output(const char *str)
{
   rt_size_t i = 0, size = 0;
    /* empty console output */ ///<
    rt_enter_critical();
    USART_ClearFlag(USART1,USART_FLAG_TC);
    size = rt_strlen(str);
      /* 直到字符串结束 */
    for (i = 0; i < size; i++)
    {
        /* 换行 */
        //RT-Thread 系统中已有的打印均以 n 结尾,而并非 rn,所以在字符输出时,需要在输出 n 之前输出 r,完成回车与换行,否则系统打印出来的信息将只有换行
        if ( *(str+i) == 'n' )
        {
            USART_SendData( USART1, 'r' );
            while ( USART_GetFlagStatus( USART1, USART_FLAG_TXE ) == RESET );
        }
           USART_SendData( USART1, *(str+i) );
                        while ( USART_GetFlagStatus( USART1, USART_FLAG_TXE ) == RESET );
    }
    /* 退出临界段 */
  rt_exit_critical();
}
while ( USART_GetFlagStatus( USART1, USART_FLAG_TXE ) == RESET ); 这句话在rt中使用我通过debug看出死循环了,用printf就是可以的。 如果我去掉这句话,打印就只会打印字符串的最后一个字符。举例我要打印rt_kprintf("HIn");就只会答应'n'. 如果写成
rt_kprintf("HI");
rt_thread_delay(1000);
rt_kprintf("you");
rt_thread_delay(1000);
字符串取消了'n'
就会打印 I 延时后 打印u
如果这些
rt_kprintf("HI");
rt_kprintf("HI");
rt_kprintf("OO");
rt_thread_delay(1000);
rt_kprintf("you");
rt_thread_delay(1000);
就会打印 O 延时后 打印u ,上面的2个都直接跳过。 但是我在debug一个一个打印都是可以的,打印到一半就卡死。

回帖(1)

小萃米

2022-5-10 09:51:02
初始化位置错了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分