【ESP32】ESP-IDF开发 | I2C从机接收i2c_slave_receive函数的BUG导致程序崩溃解决(idf-v5.3.1版本)

1. 问题

        在调试I2C外设的demo时,按照官方文档的描述调用相关API,烧录程序后发现程序会不断崩溃,系统log如下。

        初步分析log,原因是访问到了不存在的地址。一开始我以为是自己的代码问题,反反复复改了几次都会出现同样的问题。

        后面使用backtrace追踪出现问题的代码位置,代码在执行到i2c_slave.c的77行的时候崩溃了。

        这是I2C中断服务函数内调用的,仔细观察发现,这个函数的处理就有问题。i2c_ll_read_rxfifo函数中传入的这个t->rcv_fifo_cnt参数是我们在上层调用i2c_slave_receive函数时传进去的buffer_size,这个参数的官方描述如下。

/**
 * @brief Read bytes from I2C internal buffer. Start a job to receive I2C data.
 *
 * @note This function is non-blocking, it initiates a new receive job and then returns.
 *       User should check the received data from the `on_recv_done` callback t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马浩同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值