完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用example中的pwm播放mp3,默认是没问题。然后想把mp3放到spiffs中,然后从spiffs中调用,碰到问题:
1:如果在mp3_music_read_cb中使用fread读取,最终会出现fread读取异常。 2:如果使用spiffs stream,可以读取到mp3文件的格式,但之后就会cache 异常,就是常见的Cache disabled but cached memory region accessed,pwm stream引起。 难道通过pwm播放,只能直接在flash中内嵌mp3文件? |
|
相关推荐
1个回答
|
|
在使用ESP32的PWM播放MP3时,如果遇到fread读取异常和Cache异常的问题,可以尝试以下解决方案:
1. 确保SPIFFS文件系统正确挂载:在使用SPIFFS之前,请确保已经正确挂载了SPIFFS文件系统。可以使用以下代码进行挂载: ```c esp_vfs_spiffs_conf_t conf = { .base_path = "/spiffs", .partition_label = NULL, .max_files = 5, .format_if_mount_failed = true }; esp_err_t ret = esp_vfs_spiffs_register(&conf); ``` 2. 使用正确的fread函数:在读取SPIFFS文件时,请确保使用了正确的fread函数。例如,使用以下代码打开和读取文件: ```c FILE *fp = fopen("/spiffs/your_mp3_file.mp3", "r"); if (fp == NULL) { // 处理错误 } ``` 3. 确保MP3文件格式正确:请确保存储在SPIFFS中的MP3文件格式正确,没有损坏。可以尝试使用其他播放器或设备播放该MP3文件,以确保其有效性。 4. 调整MP3播放器的缓冲区大小:如果fread读取异常仍然存在,可以尝试增加MP3播放器的缓冲区大小。这可以通过修改MP3播放器库的配置来实现。例如,在使用ESP32的ESP-ADF框架时,可以修改`audio_pipeline.h`文件中的`ringbuf`大小。 5. 使用DMA传输:如果仍然遇到Cache异常问题,可以尝试使用DMA(Direct Memory Access)传输数据。这可以减少CPU的负担,并避免Cache异常。在ESP32中,可以使用`esp_err_t spi_flash_read(size_t src_addr, void *dest, size_t size)`函数进行DMA传输。 6. 检查内存泄漏:如果问题仍然存在,请检查代码中是否存在内存泄漏。可以使用ESP-IDF的内存调试工具,如`espheap_caps_check_integrity_all()`和`heap_caps_dump()`,来检查内存使用情况。 总之,通过调整SPIFFS挂载、使用正确的fread函数、确保MP3文件格式正确、调整缓冲区大小、使用DMA传输和检查内存泄漏等方法,应该可以解决在使用PWM播放MP3时遇到的fread读取异常和Cache异常问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
180个成员聚集在这个小组
加入小组453 浏览 1 评论
1450 浏览 1 评论
618浏览 6评论
514浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
494浏览 5评论
496浏览 4评论
486浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-2 17:21 , Processed in 0.865982 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号