Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
出现hard falut ,找不出是什么原因
发布于 2012-03-13 15:20:51 浏览:5208
订阅该版
老是出现hard fault ,指向“ if(pReadEncodeData->Ready ==0) ”这条语句,好像读出一个字节时出现的hard fault 。 下面附部分出现和出现hard fault 的相应汇编 和finsh信息。 不知道是什么情况引起的呢? &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ```while(1) { rt_mb_recv(DecoderMB,&value,RT_WAITING_FOREVER); //等待邮箱数据 //如果mailbox发来的不是1或2时说明是发来语音数据,1和2是TIM3通知的信号:表示解压下一个缓冲区了,如果是3表示串口收到语音数据 if(value==3) //说明有新的数据从串口进来了 { cout++; // cout的计数并不准,因为语音缓冲区现在不检查溢出,当有溢出时就不准了 if((state==0) & (cout>100) ) { // rt_kprintf("0x%x ",pWriteEncodeData); //打印出写指针的地址 state=1; device->open(device,0); //打开Decoder rt_kprintf("Decoder open "); } continue;//value==3只是通知有数据来了要打开Decoder设备,准备解压并播放,所以打开设备后可以直接返回 } else { err=rt_mutex_take(EncodeDataBuffermutex,RT_WAITING_FOREVER); RT_ASSERT(err == RT_EOK); if(pReadEncodeData->Ready ==0) //hard fault 就指向这里 { if((state==1)) { // rt_kprintf("0x%x ",pReadEncodeData); //打印出读指针的地址 state=0; device->close(device); //关闭Decoder rt_kprintf("Decoder close "); } err=rt_mutex_release(EncodeDataBuffermutex); RT_ASSERT(err == RT_EOK); continue; } //假如缓冲区没有就绪好的数据,直接跳过 } cout--; //如果value==1、value==2 表是缓冲区的数据播放完了,需要解压语音数据,注意这里value不能是其他值 device->write(device,value,pReadEncodeData->Data,ENCODED_FRAME_SIZE); //语音解压,并播放 pReadEncodeData->Ready=0; pReadEncodeData=pReadEncodeData->next; err=rt_mutex_release(EncodeDataBuffermutex); RT_ASSERT(err == RT_EOK); }``` &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 0x08017782 69F2 LDR r2,[r6,#0x1C] 0x08017784 7810 LDRB r0,[r2,#0x00] 0x08017786 B1D0 CBZ r0,0x080177BE &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& psr: 0x61000000 pc: 0x08017784 lr: 0x08001dcf r12: 0xfffffd3a r03: 0xffffffff r02: 0xa00abd7c r01: 0x00000000 r00: 0x00000000 ![hard fault state.png](https://oss-club.rt-thread.org/uploads/3847_775bb2295da6e801715adee19b95dc08.png)
查看更多
10
个回答
默认排序
按发布时间排序
lindabell
2012-03-13
这家伙很懒,什么也没写!
怎么用邮箱发帖的,我的被退回来了 收件人 写的是什么?? 我写的是rt-thread-cnusers@googlegroups.com
aozima
2012-03-13
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
>怎么用邮箱发帖的,我的被退回来了 >收件人 写的是什么?? 我写的是rt-thread-cnusers@googlegroups.com --- 加入邮件组的方法在首页有详细说明。但同个问题还请不要重复发。 你的问题就是空99%是空指针或指向错误的地方,上次在贴子里面详细回复你了。
aozima
2012-03-13
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
``` 0x08017782 69F2 LDR r2,[r6,#0x1C] 0x08017784 7810 LDRB r0,[r2,#0x00] 0x08017786 B1D0 CBZ r0,0x080177BE ``` psr: 0x61000000 pc: 0x08017784 lr: 0x08001dcf r12: 0xfffffd3a r03: 0xffffffff r02: 0xa00abd7c <-- 请结合 0x08017784 分析此地址是否正确? r01: 0x00000000 r00: 0x00000000
lindabell
2012-03-13
这家伙很懒,什么也没写!
仿真发现产生hard fault 是因为bus fault 上访引起 hard fault 其中bus fault是因为“精确的数据访问违例”引起的 我想对应程序应该是?读取 “pReadEncodeData->Ready”这个值时引起的 [attach]921[/attach]
lindabell
2012-03-13
这家伙很懒,什么也没写!
>>怎么用邮箱发帖的,我的被退回来了 >>收件人 写的是什么?? 我写的是rt-thread-cnusers@googlegroups.com > >--- > > >加入邮件组的方法在首页有详细说明。 > >你的问题就是空99%是空指针或指向错误的地方,上次在贴子里面详细回复你了。 --- 由于能力太差了,你的回复看不懂啊 查了很长时间,实在没有能力解决,所以到这里来发帖了 [s:187] “空指针”应该不太可能;因为有时运行很长时间都不会出现 “指向错误的地方”的可能性大一些
aozima
2012-03-13
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
直接看下具体值是多少不就知道了么?
lindabell
2012-03-13
这家伙很懒,什么也没写!
pWriteEncodeData 的值居然是0x71B726D8 我扩展的SRAM 实在0x6C000000 到 0x6C100000 怎么就出现一个野指针了??? 我分配内存应该没有问题吧,因为有时可以运行很长时间的,肯定每个节点都使用过了,这说明分配的内存地址都应该是正确的。 定义了一个结构体 struct ReceiveEncodeDataTypedef { u8 Ready; s8 Data[20]; struct ReceiveEncodeDataTypedef *next; }; 声明了两个指针(读、写) struct ReceiveEncodeDataTypedef *pReadEncodeData; struct ReceiveEncodeDataTypedef *pWriteEncodeData; 动态分配内存函数 static ReceiveBufInit(u16 num) { u16 i=0; RT_ASSERT(num<65535); // EncodeDataBuffermutex=rt_mutex_create("EncodeDataBuffermutex",RT_IPC_FLAG_FIFO);//创建缓冲区互斥量 rt_mutex_init(EncodeDataBuffermutex,"EDBMutex",RT_IPC_FLAG_FIFO); pReadEncodeData=(struct ReceiveEncodeDataTypedef *)rt_malloc(sizeof(struct ReceiveEncodeDataTypedef)); //申请内存 pReadEncodeData->Ready=0; pWriteEncodeData=pReadEncodeData; //记录链表头 for(i=0;i
next=(struct ReceiveEncodeDataTypedef *)rt_malloc(sizeof(struct ReceiveEncodeDataTypedef));//申请内存 pReadEncodeData=pReadEncodeData->next; pReadEncodeData->Ready=0; } pReadEncodeData->next=pWriteEncodeData; pReadEncodeData=pWriteEncodeData; //两指针开始指向同一个节点 } 分配1000个节点,并初始化 ReceiveBufInit(1000);//初始化接收结构体 在调用是使用pWriteEncodeData指针往节点里写数据,通过pReadEncodeData指针读取数据
lindabell
2012-03-14
这家伙很懒,什么也没写!
解决了,原来是硬件问题 真不可思议的硬件问题,同样的程序在另一台机上一点问题都没有。但是奇怪的是每次出现hard fault都指向读/写指针用来判断ready的值那里,哪有这么巧的 后来怀疑布线问题,但是哪有每次都出现在同一个地方的;再怀疑虚焊,同样也不会每次都出现在同一个地方啊 最后怀疑STM32芯片内的flash有问题了,但又没有有力的证据它有问题;于是干脆重新焊一块新板再测试。果真新版没有出现任何问题。 反正是解决了,也不知道是什么原因引起的【终于可以放下一块石头了 [s:175] 】 不知道大家有出现过这种现象吗
aozima
2012-03-14
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
1.断路直接跑memtest就可以查出问题。 2.虚焊则只能靠许愿了。 3.然后FSMC同时被DMA和MCU操作则数据错乱。
撰写答案
登录
注册新账号
关注者
0
被浏览
5.2k
关于作者
lindabell
这家伙很懒,什么也没写!
提问
9
回答
93
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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 2024开发者大会议程正式发布!
2
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
3
RT-Thread EtherKit开源以太网硬件正式发布
4
如何在master上的BSP中添加配置yml文件
5
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
热门标签
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
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部