CH32V208基于TencentOS如何定位hardfault问题?

将原来的裸机程序移植到TencentOSTiny之后,总是会hardfault,通过调试,能定位到是哪个线程,不过那部分代码经过精简,而且增大了堆栈,还是会出现。而调试的时候堆栈也没有正常显示哪里出问题。以前用Cortex-M加RT-thread倒是知道怎么通过PSP定位问题,RISC-V不熟悉,看来一下青稞的文档,还是不太会。知道涉及这几个寄存器,但是mepc不像有效地址。始终定位不到问题所在。

mepc0xaceadd18 (Hex)

mscratch0x4202273e (Hex)

mcause2

mtval0

mtvec0x3b (Hex)

mstatus0x1888 (Hex)

WX<span class='label label-success'>个人信息保护,已隐藏</span>

WX<span class='label label-success'>个人信息保护,已隐藏</span>

static void _cc_entry(void *arg)
{
        uint16_t inval;
        int i;
        while(1)
        {
            tos_task_delay(tos_millisec2tick(10));
            inval = GPIO_ReadInputData(GPIOB);
            for (i = 0; i < 5; ++i)
            {
                if(inval == 0)
                {
                    inval = GPIO_ReadInputData(GPIOB);
                }
            }
        }
}

比较迷惑的是,这个线程已经是很简单的了。搞不懂。这个用4096还是2048的堆栈都是会hardfault。另一个netlib的倒没出现问题。


还有就是,我看rtos里面中断用的修饰没有带"WCH-Interrupt-fast",是否RTOS下所有中断都不能带这个?



您好,首先若你使用MCU为CH32V208系列的话,注意一下启动文件、ld文件以及相关宏定义的配置,如下图1。其次,若你将mstatus寄存器的值设置为0x1888时,表示配置在机器模式下,中断声明方式采用软件压栈的声明方式,可参考下图2。后续若有问题,可通过邮箱(lzs@wch.cn)和我沟通。

image.png

图1

image.png

图2


只有登录才能回复,可以选择微信账号登录