用J-LINK的RTT输入输出文本会死循环或者HardFault

2019-12-19 18:11发布

本帖最后由 gamethink 于 2018-4-20 18:14 编辑

J-LINK V8的,驱动是5.03不敢用太高,RTT的头文件也是5.03配套的,出现这些怪问题,调试几天不解
首先,RTT的所有代码没有修改过,SEGGER_RTT_Conf.h也没有修改,使用默认值,MDK为最新的5.25
第一种情况,单纯输出字符也死循环。

int main(void)
{
        SEGGER_RTT_Init();
       
        SEGGER_RTT_ConfigUpBuffer(0, NULL, NULL, 0, SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL);
       
        SEGGER_RTT_WriteString(0, "SEGGER Real-Time-Terminal Sample ");
        SEGGER_RTT_printf(0, "Len = %d ", 10);                                                                                                 \极其怪异!如果%d修改为%.1d则不会进入RTT的函数死循环,很怪异!
            while(1);
}

RTT输出窗口可以输出SEGGER Real-Time-Terminal Sample,然后第二行Len = 10没有输出,然后是死循环在RTT的处理函数,里面函数还没看明白,但是一直在循环。
但如果改成%.1d则正常输出,是这样子:
SEGGER Real-Time-Terminal Sample

Len = 10




第二种情况,输入一串数字,返回数字的长度,还有显示,比如输入123,输出Len = 4, Data = 123,因为RTT输入界面包含换行符,所以长度是4。
void TestTimer(void)                                                                                                        \这个函数会1秒钟执行一次,是M3的SYSTICK中断里调用的
{
        uint8_t rttData[32] = {0};
        static uint8_t len;
       
        if(SEGGER_RTT_HasKey() == 1)
        {
                len = SEGGER_RTT_Read(0, &rttData[0], sizeof(rttData));
                rttData[len] = '';
               
                SEGGER_RTT_printf(0, "Len = %.1d, Data = %s ",len, rttData);                        \用%1.d也是第一种情况的原因,如果用%d,当输入达到10以上就会进入RTT自己的函数死循环跳不出
        }                                                                                                                                       
}

int main(void)
{
        volatile int _Cnt;

        SEGGER_RTT_Init();
        SEGGER_RTT_ConfigUpBuffer(0, NULL, NULL, 0, SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL);

        SEGGER_RTT_WriteString(0, "SEGGER Real-Time-Terminal Sample ");

        TimerInit(1000000);
        TimerAddISR(TestTimer);

            while(1)
        {
                Routine();
        }
}

刚开始如果输入123abc,MCU收到后回发给电脑,电脑显示Len = 7, Data = 123abc,好像很正常,但是如果不停往RTT输入字符,比如123,123,123....很快不用10次,就会死机,进入hardfault的状态
微信图片_20180420180842.png (39.68 KB, 下载次数: 0) 下载附件 2018-4-20 18:09 上传
可以看到图的死机位置,和RTT终端窗口实际我只发了很少数据,而且不是连续发的,是几秒钟发一个123也会hardfault
已经调了几天了,好郁闷,有哪位朋友懂这个东西?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。