硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2331|回复: 11
收起左侧

[技术讨论] FreeRTOS操作I2C一直处于busy状态

[复制链接]

34

主题

206

回帖

308

积分

高级会员

积分
308
发表于 2024-8-14 16:47:50 | 显示全部楼层 |阅读模式
本帖最后由 LinY 于 2024-8-15 10:05 编辑

开启FreeRTOS之前 读写I2C都正常的
开启FreeRTOS之后,中途操作I2C 发现读写失败,调试发现是I2C_WaitOnFlagUntilTimeout里面判断超时返回busy
查看I2C寄存器SR2一直是0x00000003U  busy中
但是这路I2C只有1个设备,而且也不会同时去操作的。

QQ截图20240814165121.png

通过注释代码慢慢排查,发现是LVGL操作问题,几个label设置注释掉就没问题,但是LVGL显示到LCD是通过SPI1去操作的,和这个I2C1有什么关系吗

求问有大佬遇到过这个情况,或者看看有可能得原因?

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-8-15 10:02:42 | 显示全部楼层
这个问题,之前论坛有个类似的问题,是HAL库的处理问题导致的。你单步跟踪下,看看是不是有个函数执行的时候操作状态不对。

我现在找不到那个帖子了。
回复

使用道具 举报

34

主题

206

回帖

308

积分

高级会员

积分
308
 楼主| 发表于 2024-8-15 10:09:28 | 显示全部楼层
eric2013 发表于 2024-8-15 10:02
这个问题,之前论坛有个类似的问题,是HAL库的处理问题导致的。你单步跟踪下,看看是不是有个函数执行的时 ...

通过一段段代码分别注释慢慢排查,发现是LVGL操作问题,有几个label设置文本注释掉就没问题,但是LVGL显示到LCD是通过SPI1去操作的,和这个I2C1有什么关系吗

会是时钟线影响到么
回复

使用道具 举报

6

主题

90

回帖

108

积分

初级会员

积分
108
发表于 2024-8-15 11:25:19 | 显示全部楼层
不懂,帮顶下,另外LVGL这几个标签是不是显示的数据是通过I2C相关的设备读取的?
回复

使用道具 举报

34

主题

206

回帖

308

积分

高级会员

积分
308
 楼主| 发表于 2024-8-15 13:43:59 | 显示全部楼层
lizhaoming 发表于 2024-8-15 11:25
不懂,帮顶下,另外LVGL这几个标签是不是显示的数据是通过I2C相关的设备读取的?

没有
我试过用字符串直接写,有几个label写入就正常。就其中有2个label写入I2C那边就出问题了
就奇怪 同样的label
回复

使用道具 举报

3

主题

295

回帖

304

积分

高级会员

积分
304
发表于 2024-8-15 14:38:41 | 显示全部楼层
可能是读写I2C的过程中被切到高优先级任务而且长时间没返回,你的spi写lcd的优先级是不是比写I2C高,把spi和i2c任务都放到同一优先级试试
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-8-16 09:56:49 | 显示全部楼层
LinY 发表于 2024-8-15 10:09
通过一段段代码分别注释慢慢排查,发现是LVGL操作问题,有几个label设置文本注释掉就没问题,但是LVGL显 ...

如果没有关系,估计程序里面其它地方有隐含的bug没有找到。
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2024-8-19 14:42:48 | 显示全部楼层
调用IIC时,加锁试一下
回复

使用道具 举报

34

主题

206

回帖

308

积分

高级会员

积分
308
 楼主| 发表于 2024-8-20 09:56:37 | 显示全部楼层
skyshine 发表于 2024-8-15 14:38
可能是读写I2C的过程中被切到高优先级任务而且长时间没返回,你的spi写lcd的优先级是不是比写I2C高,把spi ...



解决了 确实是优先级的问题
调整了下 确实好了
之前I2C读写所在任务优先级是osPriorityNormal
lvgl的lv_timer_handler所在任务优先级是osPriorityNormal1,改成osPriorityBelowNormal7就没异常了
回复

使用道具 举报

3

主题

295

回帖

304

积分

高级会员

积分
304
发表于 2024-8-20 10:08:54 | 显示全部楼层
LinY 发表于 2024-8-20 09:56
解决了 确实是优先级的问题
调整了下 确实好了
之前I2C读写所在任务优先级是osPriorityNormal ...

hal库很多处理都是死等标志位,如果标志位没及时更新就会导致hal库处理时间过长,如果放在高优先级就是一直占用cpu,没有时间让出来给低优先级任务
回复

使用道具 举报

3

主题

295

回帖

304

积分

高级会员

积分
304
发表于 2024-8-20 10:11:02 | 显示全部楼层
如果能用dma就用dma,传输速率慢点,但不会占用过多cpu时间
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2025-5-1 21:14:12 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:28 , Processed in 0.053855 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表