完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
IDF: esp-idf v4.2.2
HW: ESP32D0WD-V3 OS: Windows 10 如果开启了CONFIG_VFS_SUPPORT_SELECT特性就会“在ISR内调用flash代码”的错误。 分析过程如下: 【1】在vfs组件里,vfs_uart.c文件中定义了select_notif_callback_isr()函数,它是定位在flash中的代码片段。 static void select_notif_callback_isr(uart_port_t uart_num, uart_select_notif_t uart_select_notif, BaseType_t *task_woken); 【2】而uart_start_select()被select接口调用时,执行如下代码把select_notif_callback_isr函数配置为uart驱动的select通知回调函数: uart_set_select_notif_callback(i, select_notif_callback_isr); 【3】uart.c文件中的uart_set_select_notif_callback函数定义如下: void uart_set_select_notif_callback(uart_port_t uart_num, uart_select_notif_callback_t uart_select_notif_callback){ if (uart_num < UART_NUM_MAX && p_uart_obj[uart_num]) { p_uart_obj[uart_num]->uart_select_notif_callback = (uart_select_notif_callback_t) uart_select_notif_callback; }} 【4】当uart进入ISR后,多处执行了如下代码,这实际上是调用了flash中的select_notif_callback_isr函数。 if (p_uart->uart_select_notif_callback) { p_uart->uart_select_notif_callback(...);} 【5】如果此时cache禁用(例如在OTA升级),flash代码不可执行,就会导致异常! 总结:ESP32由于flash用于XIP的设计,同时又用于读写用户数据和OTA。这虽然成本降低了,但引入非常多与此相关的BUG。 |
|
相关推荐
1个回答
|
|
|
以下是一些建议来解决这个问题:
1. **检查代码和配置**:首先,请确保您的代码和配置是正确的。检查 vfs_uart.c 文件中的 select_notif_callback_isr 函数是否正确实现,并确保 UART 驱动的 select 通知回调函数配置正确。 2. **更新 ESP-IDF**:您当前使用的是 ESP-IDF v4.2.2 版本。尝试更新到最新的稳定版本(例如 v4.4),因为新版本可能已经修复了这个问题。 3. **禁用 CONFIG_VFS_SUPPORT_SELECT**:如果问题仍然存在,您可以尝试禁用 CONFIG_VFS_SUPPORT_SELECT 特性,以避免使用 select 功能。这可能会影响您的应用程序的某些功能,但可以作为临时解决方案。 4. **修改 select_notif_callback_isr 函数**:如果问题仍然存在,您可以尝试将 select_notif_callback_isr 函数从 flash 中移动到 IRAM 中。这可以通过在函数声明前添加 `__attribute__((section(".iram.text")))` 属性来实现。例如: ```c __attribute__((section(".iram.text"))) static void select_notif_callback_isr(uart_port_t uart_num, uart_select_notif_t uart_select_notif, BaseType_t *task_woken); ``` 5. **检查中断优先级**:确保 UART 接收中断的优先级设置正确。如果优先级设置过高,可能会导致其他中断无法正常工作。您可以在 ESP-IDF 的配置文件中调整 UART 接收中断的优先级。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
945 浏览 0 评论
1672 浏览 0 评论
请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
1330 浏览 1 评论
1233 浏览 1 评论
5021 浏览 2 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
1254浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
927浏览 3评论
2340浏览 3评论
ESP-IDF的VScode插件的build按钮点击会报错的原因?
2528浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
1052浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 21:11 , Processed in 0.578173 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
448
