OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1974|回复: 2

求助,求助,一个奇怪的问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-5-17
在线时间
2 小时
发表于 2019-5-17 15:12:27 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 悠悠三千载 于 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 != '\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);


    /* 退出临界段 */
    rt_exit_critical();
}
[/mw_shl_code]

这是为什么呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-5-17 18:40:34 | 显示全部楼层
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14433
金钱
14433
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-5-17 18:53:16 | 显示全部楼层
帮顶!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-25 20:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表