Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
求助:BUS FAULT
发布于 2014-07-30 16:48:38 浏览:4358
订阅该版
我在工程中加入一个新的线程后串口就会打印出如下信息 ```psr: 0x21000000 r00: 0x2000ab58 r01: 0x10000000 r02: 0xf0000000 r03: 0x00000020 r04: 0x00000000 r05: 0x00000000 r06: 0xfffffffc r07: 0x2000fd28 r08: 0x00000001 r09: 0x00000000 r10: 0xdeadbeef r11: 0x00000000 r12: 0x00000000 lr: 0x0800ff9d pc: 0x0800ff9c hard fault on thread: mp2 thread pri status sp stack size max used left tick error -------- ---- ------- ---------- ---------- ---------- ---------- --- tidle 0x1f ready 0x00000040 0x00000100 0x00000060 0x0000000f 000 tshell 0x0c suspend 0x00000090 0x00000800 0x00000090 0x0000000a 000 mp2 0x06 ready 0x000000a8 0x00000800 0x000000e0 0x00000014 000 fc8080 0x05 suspend 0x00000078 0x00001000 0x00000108 0x00000014 000 isr 0x07 ready 0x00000078 0x00000400 0x000000d0 0x00000014 -02 frame 0x08 suspend 0x000000d8 0x00000400 0x00000240 0x0000000f 000 bus fault: SCB_CFSR_BFSR:0x82 PRECISERR SCB->BFAR:FFFFFFFC``` hard fault的PC值指向的函数是rt_hw_context_switch_to((rt_uint32_t)&to_thread->sp);之后的地方,该怎么找问题?! 请问bus fault该如何理解?
查看更多
5
个回答
默认排序
按发布时间排序
pangwei
2014-07-31
这家伙很懒,什么也没写!
自己线程是不是有非法操作。得看代码才行
Zitral
2014-07-31
这家伙很懒,什么也没写!
>自己线程是不是有非法操作。得看代码才行 --- 之前用的是STM32F205单片机,没有这个问题,现在用的是GD32F103(兼容STM32F103),下面是mp2代码 ``` #include
#include
//#include
#include "global.h" #include "decoder.h" //#include "dab_fifo.h" #include "dab_packet.h" #include "dec_callback.h" #include "audio.h" /* states: DEC_IDLE DEC_MP2_INIT DEC_MP2_NOR DEC_MP2_FINISH DEC_AAC_INIT DEC_AAC_HEAD DEC_AAC_NOR DEC_AAC_FINISH DEC_SWITCH */ #define MP2_PCM_SIZE (1152*2*2) #define AAC_PCM_SIZE (2048*2*2) #define DEC_STATE_IDLE 0 //#define DEC_STATE_CHK 0 #define DEC_STATE_NOR 1 int level_t; DAB_PACKET packet; uint16_t packet_offset; extern void AUDIO_DACDMAConfig(void * pbuffer,uint32_t buffersize,int inc); int DAB_MP2Read(unsigned char *pbuf,int bytec) { int i, size_t; //rt_kprintf("%4d, %4d ", packet_offset, bytec); size_t = ((packet_offset + bytec) > packet.size)? (packet.size - packet_offset): bytec; for(i = 0; i < size_t; i++) { pbuf[i] = packet.payload[packet_offset + i]; } packet_offset += i; return size_t; } extern void mp2_thread_entry(void* parameter) { int dec_state=0; rt_mp_t mp2_mp; uint32_t val; int err; int first_frame; void * poutbuffer=RT_NULL; void * mp2_mp_data; rt_device_t dev=RT_NULL; //mp2_mp mp2_mp_data=rt_malloc((MP2_PCM_SIZE+4)*2); mp2_mp=rt_malloc(sizeof(struct rt_mempool)); // err=rt_mp_init(mp2_mp,"mp2",mp2_mp_data,(MP2_PCM_SIZE+4)*2,MP2_PCM_SIZE); if(err!=RT_EOK) goto mp2_exit; //dev dev=rt_device_find("aud"); if(dev==RT_NULL) { rt_kprintf("can't find device aud "); goto mp2_exit; } err=rt_device_open(dev,RT_DEVICE_FLAG_RDONLY); if((err==RT_EOK)||(err==-RT_EBUSY)) { rt_kprintf("aud open successed "); val=48000; rt_device_control(dev,AUDIO_SET_SAMPLERATE,&val); } else goto mp2_exit; crcdisable = 0; DecoderInit(DAB_MP2Read); /**********************/ first_frame = 1; while(1) { val = DAB_Packet_Take(&packet); if(val != 0) { rt_thread_delay(1); continue; } //rt_kprintf("packet got "); if(packet.type != 0) { rt_kprintf("not support "); DAB_Packet_Release(&packet); continue; } packet_offset = 0; val = DecodeFrame(0); if(val != 0) { rt_kprintf("frame err %d ", val); first_frame = 1; DAB_Packet_Release(&packet); continue; } DAB_Packet_Release(&packet); if(first_frame) { uint32_t fs = DecoderGetSample(); rt_device_control(dev,AUDIO_SET_SAMPLERATE,&fs); first_frame = 0; } poutbuffer = rt_mp_alloc(mp2_mp,RT_WAITING_FOREVER); rt_memcpy(poutbuffer,AudioBuffer,MP2_PCM_SIZE); // if(FLAGS.AACDMA_Init==0) // { // //InitDMA_FORDAB(); // AUDIO_DACDMAConfig(poutbuffer,MP2_PCM_SIZE/4,1); // //FLAGS.AACDMA_Init=1; // } rt_device_write(dev,0,poutbuffer,MP2_PCM_SIZE); } /**********************/ mp2_exit: if(mp2_mp!=RT_NULL) { void * p1; p1=rt_mp_alloc(mp2_mp,RT_WAITING_FOREVER); if(p1!=RT_NULL) rt_mp_free(p1); rt_mp_detach(mp2_mp); rt_free(mp2_mp); } if(mp2_mp_data!=RT_NULL)rt_free(mp2_mp_data); if(dev!=0)rt_device_close(dev); } ```
amsl
2014-09-19
这家伙很懒,什么也没写!
下面的变量初值不确定: uint16_t packet_offset; 下面这条语句如果为真也会得到不确定值: size_t = ((packet_offset + bytec) > packet.size)?\ (packet.size - packet_offset): bytec; 后面的for循环可能就访问了不该访问的东西 虽然_entry函数中packet_offset=0;了 但在进while之前有句DecoderInit(DAB_MP2Read); 不知道这个DecoderInit()函数是干啥的, 如果执行了DAB_MP2Read(),就会产生你遇到的问题. 这种写法需要在定义packet_offset时赋初值.
Zitral
2014-09-25
这家伙很懒,什么也没写!
>下面的变量初值不确定: >uint16_t packet_offset; >下面这条语句如果为真也会得到不确定值: >size_t = ((packet_offset + bytec) > packet.size)? > (packet.size - packet_offset): bytec; >后面的for循环可能就访问了不该访问的东西 >虽然_entry函数中packet_offset=0;了 >但在进while之前有句DecoderInit(DAB_MP2Read); >不知道这个DecoderInit()函数是干啥的, >如果执行了DAB_MP2Read(),就会产生你遇到的问题. >这种写法需要在定义packet_offset时赋初值. --- 这个问题解决了,原因是在我程序的其他地方,有执行了rt_mp_free(packet->payload); 而packet->payload值是0,导致出错,修改后不会出现fault了!另外packet_offset也应该是赋初值的,得养成这个好习惯!
撰写答案
登录
注册新账号
关注者
0
被浏览
4.4k
关于作者
Zitral
这家伙很懒,什么也没写!
提问
13
回答
19
被采纳
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
【NXP-MCXA153】 定时器驱动移植
2
GD32F450 看门狗驱动适配
3
【NXP-MCXA153】看门狗驱动移植
4
RT-Thread Studio V2.2.9 Release Note
5
CherryUSB的bootuf2配置
热门标签
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
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
16
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
9
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部