中级会员
 
- 积分
- 414
- 金钱
- 414
- 注册时间
- 2016-2-24
- 在线时间
- 155 小时
|
1金钱
本帖最后由 全然向你 于 2020-7-16 13:42 编辑
移植的正点的音乐播放器试验,在裸机下可以正常播放,移植了freertos后将函数放到任务里不能播放音乐,仿真发现在mp3_get_info函数里的f_lseek(fmp3,fmp3->obj.objsize-128);函数处,移动指针失败,f_lseek的返回值为0X02,断言失败;将f_lseek函数放到裸机的while(1)循环里可以正常移动指针;放到freertos的任务里就会失败;百度和论坛了各种关于fatfs的文章还是没有解决了;1:在裸机情况下f_lseek函数可以正常移动指;
2:在freertos的任务里f_lseek函数移动指针失败,返回值0x02,断言失败;(只有一个任务)
3:怀疑是函数重入问题,将fatfs按照正点原子的综合历程添加了void ff_leave(FATFS* fs);void ff_enter(FATFS *fs);两个函数;问题依然没有解决;
4:看到原子哥有关fatfs字节对齐导致问题的帖子,会不会是这个原因,
各路大神或遇到过类似问题的帮忙解答一下;谢谢哦;@正点原子
5:忘了补充一点,在freertos的任务里运行到MP3FreeDecoder(mp3decoder);函数时总会进hardfaulthandler中断;
vu8 cnt0=0;
vu8 cnt1=0;
void ff_enter(FATFS *fs)
{
if(cnt0)
{
printf("in shit:%d\r\n",cnt0);
}
if(fs->drv!=3)
{
taskENTER_CRITICAL(); //½øèëáù½çÇø
cnt0++;
}else
{
vTaskSuspendAll(); //×èÖ1ucosμ÷¶è
cnt1++;
}
}
//íË3öáù½çÇø
void ff_leave(FATFS* fs)
{
if(cnt0)
{
cnt0--;
taskEXIT_CRITICAL(); //íË3öáù½çÇø
}
if(cnt1)
{
cnt1--;
xTaskResumeAll(); //¿aÆôucosμ÷¶è
}
}
这是参照综合历程改的void ff_leave(FATFS* fs);void ff_enter(FATFS *fs);两个函数
|
|