Skip to content

检查中断处理程序中调用的函数: 中断处理程序中调用的每一个函数也必须位于 IRAM 中(通常使用 IRAM_ATTR 修饰)或者是在 ROM 中已存在的函数。确保这些函数没有访问 Flash 中的内容。

IRAM_ATTR: 任何中断服务程序(ISR)都应该被定义在 IRAM 中。

c
#include "esp_attr.h"

void IRAM_ATTR my_interrupt_handler(void* arg) {
    // ISR 代码
    // 注意:在这里只能调用也位于 IRAM 中的函数
}

检查中断处理程序中使用的数据: 中断处理程序中使用的全局变量、常量应存放在 DRAM 中,使用 DRAM_ATTR 修饰,以防止编译器将其放置在 Flash 中而需要 Cache 访问。

c
const uint8_t DRAM_ATTR my_const_data[] = {0x01, 0x02, 0x03};

Released under the GPL License.