散碎的读写(IIC和SPI)等待好像没法解放CPU,请RTOS来也没救?!
老觉得通信时候的死等浪费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时间是不是就解放不了{:4_184:} _NCY_ 发表于 2025-6-11 22:40
这个现象对吗?我感觉怪怪的,让我感觉RTX51响应仿佛也没那么迅速,,,
可以使用基于状态机的协程,这个时候两个任务之间的切换基本只需要一个if的时间。
相比使用rtx51来说,切换线程消耗的资源就会更少。
具体可以看:
https://www.stcaimcu.com/thread-16598-1-1.html
或者你可以写一套基于iic或者spi中断的操作缓冲池,
将需要的操作提前存在一个数组中,
每次产生中断就清除中断标志并进行下一步的状态,
这样也可以避免死等spi或i2c的wait,
相比之下更高效,且不会太多的占用cpu时间
在计算机处理器的性能优化中,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时间。
[本文内容由国芯人工智能辅助生成,仅供参考] 以后我还是少用阻塞DELAY罢,确实让CPU白干活 这个现象对吗?我感觉怪怪的,让我感觉RTX51响应仿佛也没那么迅速,,, 管脚兼容的 STC32G12K128, DMA支持 I2C 尽量不要使用软件延时
可以使用DMA,注意LCM DMA数据地址需要4字节对齐 楼主说的确实是个问题值得思考
页:
[1]