yono 发表于 2023-12-27 21:09:23

I2C库,为什么安富莱bsp使用的是阻塞delay的形式?

我们领导说st的i2c支持有问题,大家都是自己实现的。

但是我很讨厌阻塞,想问问现在hal库的i2c结合中断搞I2C还是有问题吗?

庄永 发表于 2023-12-27 23:14:57

硬件IIC有问题是很久以前的事了,现在应该早就修复好了

Cloudczk 发表于 2023-12-28 08:05:00

我也想问,像I2C能不能用非阻塞的软件方式来实现

eric2013 发表于 2023-12-28 08:07:07

I2C从机不能用模拟,性能太差,而I2C主机,天生被模拟,有硬件主机无法比拟的优势,但也有缺点,就是楼主说的。

针对这个问题,前段时间出了个解决方案:

第9期ThreadX视频教程:自制个微秒分辨率任务调度实现方案(2023-10-11)
https://www.armbbs.cn/forum.php? ... d=121371&fromuid=58
(出处: 硬汉嵌入式论坛)

yono 发表于 2023-12-28 20:54:44

eric2013 发表于 2023-12-28 08:07
I2C从机不能用模拟,性能太差,而I2C主机,天生被模拟,有硬件主机无法比拟的优势,但也有缺点,就是楼主说 ...

感谢硬汉大哥!看了一下应该是可以的,改天改进安富莱的BSP试试。今天尝试了一下threadX的module使用threadX全家桶的其他功能,看起来如果用threadXModules,threadX的其他组件(例如GUIX、FileX)都是必须在Manager上移植?module里面实际上只能做逻辑处理了?

james03 发表于 2024-1-2 18:58:40

在部分型号用DMA的方式还没有发现问题

Cloudczk 发表于 2024-2-2 16:39:17

eric2013 发表于 2023-12-28 08:07
I2C从机不能用模拟,性能太差,而I2C主机,天生被模拟,有硬件主机无法比拟的优势,但也有缺点,就是楼主说 ...

不知道硬汉哥有没有做过测试,我把微秒分辨率的延迟,设置到2us左右,也就是I2C 400K左右的速率。定时器中断回调中信号量的Give已经换成了GiveISR,并且优先级配置成了较低,在FreeRTOS管理中,FreeRTOS中该线程会被一直阻塞。把时间稍微拉长到5us或100us,这个阻塞的问题就解决了。

eric2013 发表于 2024-2-3 08:18:47

Cloudczk 发表于 2024-2-2 16:39
不知道硬汉哥有没有做过测试,我把微秒分辨率的延迟,设置到2us左右,也就是I2C 400K左右的速率。定时器 ...

FreeRTOS的任务切换速度做到us级还是有压力的。
页: [1]
查看完整版本: I2C库,为什么安富莱bsp使用的是阻塞delay的形式?