找回密码
 立即注册
查看: 147|回复: 8

散碎的读写(IIC和SPI)等待好像没法解放CPU,请RTOS来也没救?!

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2025-06-25 14:57:18
已绑定手机

42

主题

307

回帖

982

积分

高级会员

积分
982
发表于 2025-6-11 22:37:09 来自手机 | 显示全部楼层 |阅读模式
老觉得通信时候的死等浪费CPU,就专门捣鼓了一阵把RTX51玩会了,想用它在死等的时候oswait也下释放CPU时间。
就以硬件IIC写12864来说,每次写一个字节等待这个时间加起来其实很可观的,我大概跑了一下,STC8H8K64U@40M刷一屏12864OLED(IIC速度拉满,再快就花屏了)等待的时间,足够让一个int累加10000多次!
但每次等待的时间又太短了,太散碎了,RTOS每次去发信号响应信号之类的估计就给它磨过去了,反而起不到优化作用。
我用RTX51尝试利用SPI写完每个字节的等待时间,具体的,硬件SPI写FLASH,中断模式,写完一个字节oswait一个来自spi中断的一个信号量,结果发现这么搞比原来更慢了。。。
估计是时间太散了太碎了利用不起来
但如果256个字节凑一起DMA,把等待的时间合起来,让os去等DMA中断的信号量,就能其明显优化作用(写FLASH其实真没那么占CPU,只不过以前都死等了,一写盘CPU可不得百分百榨干了)
那问题来了,我的是stc8h,iic好像没有DMA吧,那。。。至少IIC时候的CPU时间是不是就解放不了
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:508
  • 最近打卡:2025-06-28 10:05:05
已绑定手机
已实名认证

113

主题

2423

回帖

6147

积分

版主

积分
6147
发表于 2025-6-12 08:49:53 | 显示全部楼层
_NC*** 发表于 2025-6-11 22:40
这个现象对吗?我感觉怪怪的,让我感觉RTX51响应仿佛也没那么迅速,,,

可以使用基于状态机的协程,这个时候两个任务之间的切换基本只需要一个if的时间。
相比使用rtx51来说,切换线程消耗的资源就会更少。
具体可以看:
https://www.stcaimcu.com/thread-16598-1-1.html
截图202506120854398479.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:508
  • 最近打卡:2025-06-28 10:05:05
已绑定手机
已实名认证

113

主题

2423

回帖

6147

积分

版主

积分
6147
发表于 2025-6-12 08:53:36 | 显示全部楼层
或者你可以写一套基于iic或者spi中断的操作缓冲池,
将需要的操作提前存在一个数组中,
每次产生中断就清除中断标志并进行下一步的状态,
这样也可以避免死等spi或i2c的wait,
相比之下更高效,且不会太多的占用cpu时间
回复 支持 反对

使用道具 举报 送花

3

主题

533

回帖

-223

积分

等待验证会员

积分
-223
发表于 2025-6-11 22:38:00 | 显示全部楼层
在计算机处理器的性能优化中,DMA(数据通道管理)是一种非常关键的技术,能够显著提高CPU的利用率。然而,DMA技术在某些处理器(如STC8H8K64U的IIC架构)中并未直接支持,这使得在无法实现DMA的情况下,如何在IIC中优化CPU时间成为了一个挑战。然而,通过重新设计IIC或采用其他技术手段,可以实现对CPU的进一步释放。

1. DMA的优势
DMA技术能够将多个数据块直接同步到内存,从而大幅提升了CPU的利用率。例如,通过DMA,CPU可以在多个数据块的同步完成时释放CPU时间,从而显著提升整体性能。即使在IIC架构中,DMA技术的引入能够显著提升CPU的效率。

2. IIC架构的优化
STC8H8K64U的IIC架构是基于STC8的,它采用了简单的数据通道(IIC)来实现数据传输。虽然IIC架构本身设计较为简单,但其数据通道的效率仍然可以达到相当高的水平。如果能够通过重新设计IIC,使其更高效地利用数据通道,那么在无法使用DMA的情况下,仍可以通过DMA技术进一步提升CPU的利用率。

3. 在IIC中实现DMA
尽管IIC架构本身没有DMA,但在某些情况下,可以尝试将IIC的部分功能与DMA技术结合使用。例如,通过将某些数据块的处理方式与DMA协同工作,可以实现更高的CPU利用率。这种方法需要对IIC架构有一定的理解,并进行相应的优化设计。

4. 如何在IIC中优化CPU时间
在IIC架构中,CPU的利用率主要取决于数据通道的效率和数据传输的速度。如果能够通过优化数据通道的性能,或者通过重新设计IIC以减少数据传输的时间,那么CPU的利用率也会相应提高。例如,可以通过减少数据传输的延迟,或者优化数据通道的接口,来提升整体性能。

5. 总结
虽然DMA技术在IIC架构中没有直接支持,但在某些情况下,通过重新设计IIC或采用其他技术手段,可以实现对CPU的进一步优化。通过优化IIC的结构和数据传输效率,可以显著提升CPU的利用率,从而释放CPU时间。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2025-06-25 14:57:18
已绑定手机

42

主题

307

回帖

982

积分

高级会员

积分
982
发表于 2025-6-11 22:38:43 来自手机 | 显示全部楼层
以后我还是少用阻塞DELAY罢,确实让CPU白干活
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2025-06-25 14:57:18
已绑定手机

42

主题

307

回帖

982

积分

高级会员

积分
982
发表于 2025-6-11 22:40:34 来自手机 | 显示全部楼层
这个现象对吗?我感觉怪怪的,让我感觉RTX51响应仿佛也没那么迅速,,,

点评

可以使用基于状态机的协程,这个时候两个任务之间的切换基本只需要一个if的时间。 相比使用rtx51来说,切换线程消耗的资源就会更少。 具体可以看:https://www.stcaimcu.com/thread-16598-1-1.html  详情 回复 发表于 2025-6-12 08:49
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

740

主题

1万

回帖

1万

积分

管理员

积分
17153
发表于 2025-6-11 23:56:20 | 显示全部楼层
管脚兼容的 STC32G12K128, DMA支持 I2C
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:480
  • 最近打卡:2025-06-28 00:00:59
已绑定手机

80

主题

5214

回帖

9305

积分

超级版主

DebugLab

积分
9305
发表于 2025-6-12 06:22:21 | 显示全部楼层
尽量不要使用软件延时
可以使用DMA,注意LCM DMA数据地址需要4字节对齐
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:545
  • 最近打卡:2025-06-29 00:31:25

1

主题

120

回帖

1967

积分

金牌会员

积分
1967
发表于 2025-6-12 09:43:59 | 显示全部楼层
楼主说的确实是个问题值得思考
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-29 05:26 , Processed in 0.598097 second(s), 97 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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