Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
risc-v_RISCV
Cpp异常Exception
10
risc-v移植rtthread,程序莫名跳转到异常Exception
发布于 2020-09-24 16:10:35 浏览:2475
订阅该版
![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.5k
关于作者
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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
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
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
5
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部