Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
risc-v_RISCV
Cpp异常Exception
10
risc-v移植rtthread,程序莫名跳转到异常Exception
发布于 2020-09-24 16:10:35 浏览:2614
订阅该版
![360截图20200924161430513.jpg](/uploads/20200924/718bdcd10af7245ac1e7b2331fa6b046.jpg) 移植rtthread到risc-v上,写了个简单的线程,结果运行一会儿遇到个奇怪的bug--异常!,打印的信息为mcause: 0xlx,搞得我一头雾水,这是什么情况,下面将详述过程,望各位大神帮帮忙。 硬件平台:sipeed longan nano 软件平台:nucleiStudio IDE202009 + rtthread 一、前言 想在risc-v上移植rtthread有段时间了,一直忙着没时间,前不久闲下来看到sipeed的龙眼longan nano开发板,居然才十几块钱,果断下手,于是便开始操作。 二、IDE及工具 longan nano采用的是兆易创新的GD32VF103CB芯片,主频108MHz,128K FLASH,32K SRAM,移植rtthread毫无压力; 有了开发板,还得找个IDE和下载工具,sipeed官方给的是vs code上的platform IO,rtthread官方给的是eclipse,芯来科技给的是更改版的eclipse--nucleiStudio IDE和segger的IDE,对比了下,发现将rtthread和IDE结合的较好的是nucleiStudio IDE,202009版可以直接在IDE里创建rtthread例程;下载工具采用的是JLINK v10; 三、过程 IDE里创建例程较为简单,一步步跟着向导就OK了,创建成功后进行了如下修改; main线程初始化USART2为DMA接收和DMA发送方式,进入while(1)前启动DMA接收,长度为12字节,在DMA接收中断里发出信号量,主线程while(1)里一直等待该信号量,等到后将接收到的数据通过DMA发出,然后再次启动DMA接收,回到while(1)头部,继续等待信号量; 通过USB--TTL连接longan nano的USART2,定时100ms向开发板发出“hello world!”,可以看到串口调试助手收到了“hello world!”的回复,这样连续运行几分钟或十几分钟后程序突然就挂掉了,不再有任何回复,通过连接longan nano的USART0(console)的USB--TTL可以看到不停的有数据从板子发出,发现是重复的“mcause :0xlx”(这个是L的小写,不是1),查找代码发现是以下代码发出的信息; ```c static void system_default_exception_handler(unsigned long mcause, unsigned long sp) { /* TODO: Uncomment this if you have implement printf function */ printf("MCAUSE: 0x%lx\r\n", mcause); printf("MEPC : 0x%lx\r\n", __RV_CSR_READ(CSR_MEPC)); printf("MTVAL : 0x%lx\r\n", __RV_CSR_READ(CSR_MBADADDR)); while(1); } ``` 用JLINK进入调试模式,挂掉后的确停在printf("MCAUSE: 0x%lx\r\n", mcause);这句上,查看mcause的值,发现是0x30000001,查看手册,第0位为1表示“指令地址非对齐(Instruction address misaligned)”,28/29位为1表示“进入中断前的特权模式”为0x03; 进行到这儿,就卡住了!不知该如何下手! risc-v本身bug?移植rtthread有问题?线程写的有问题?为什么一直不停的重复printf而不是卡在while(1); 望大神帮帮忙,谢谢!
查看更多
1
个回答
默认排序
按发布时间排序
aozima
2020-09-24
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
整理得挺好, 建议可以对比下这个完整代码包 https://item.taobao.com/item.htm?id=602081071158 以及看下这位坑友 https://whycan.com/t_5131.html
撰写答案
登录
注册新账号
关注者
0
被浏览
2.6k
关于作者
Jachle
这家伙很懒,什么也没写!
提问
8
回答
3
被采纳
0
关注TA
发私信
相关问题
1
studio能否支持risc-v的工程,包括调试。
2
移植rt-nano至risc-v时,无法在main函数创建用户线程
3
GD32VF103出现to free a bad data block:错误
4
rtt os riscv Store address misaligned异常
5
仅实现机器模式的芯片是否可以移植RT-THREAD系统
6
nano版本移植finsh(基于risc-v)
7
C++在多核下cout打印引起崩溃
8
RT-SMART求助
9
RT-Thread在RISC-V架构的芯片上有成熟的市场项目吗?
10
RISC-V 内核移植问题请教
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-Thread项目助手v0.2.0 - 支持Env Windows
2
RttreadV5.10上,GD32F450Z RTC时间显示问题
3
rt-smart启动流程分析
4
EtherKit快速上手PROFINET
5
RTThread USB转串口无法接收数据
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部