先楫半导体HPMicro
直播中

王乐辉

9年用户 13经验值
擅长:嵌入式技术,控制/MCU
私信 关注
[问答]

USBX范例中启用 double FPU , 运行异常,卡死在tx_risc_v_trap_handler函数

配置如图所示:

2023-08-11_18-17-57.png

回帖(5)

小徐3511

2023-8-11 18:23:27
你好,
这个问题是由于处理D扩展的汇编代码有bug引起的,可以用附件中的代码替换hpm_sdk\middleware\azure_rtos\threadx\ports\riscv32\gnu\src中的代码。看看是否能解决问题。
此外,threadx的组件中一些默认的线程堆栈对于D扩展来说太小了,比如USBX中的UX_THREAD_STACK_SIZE和UX_HOST_ENUM_THREAD_STACK_SIZE,可以在CMakeLists.txt中增加sdk_compile_definitions(-DUX_THREAD_STACK_SIZE=8192)来增大相应的堆栈
threadx_fix_D_ext.zip (7.75 KB)
(下载次数: 9, 2023-8-14 14:52 上传)





举报

王乐辉

2023-8-14 15:16:54
非常感谢,目前初步测试功能正常了
举报

王乐辉

2023-8-16 18:38:20
徐工你好,D扩展移植,现场保存代码中汇编貌似有点问题

1 举报
  • 小徐3511: 左边的这个是有问题的,附件中的代码应该是右边这个。右边这个应该是没有问题的。参考F扩展时候的处理,这段代码是保存fcsr的值到任务堆栈中。

王乐辉

2023-8-17 14:39:57
另外,ThreadX对FPU扩展的上下文处理,能否像FreeRTOS那样按需处理?
MSTATUS寄存器有个FS_DIRTY标记位

1 举报
  • 小徐3511: 这个threadx确实没有做判断,理论上确实是可以加的。

更多回帖

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