
61 状态机与DMA:零拷贝数据流的设计模式老张上周差点把产线搞停。他负责的工业相机项目,每秒要处理120帧1080p图像,状态机跑在Cortex-M7上,DMA直接把数据丢进内存。原本好好的,加了个图像预处理状态后,帧率从120fps掉到45fps。他找我排查时,我一眼看到问题:状态机里有个memcpy,把DMA缓冲区的数据拷到了“自己的缓冲区”。就这一行代码,CPU占用率从30%飙到85%。“我明明只是拷贝了数据啊?”老张委屈地说。没错,但每帧拷贝2MB数据,每秒拷贝240MB,再强的MCU也扛不住。痛点拆解:状态机里的“隐形搬运工”很多工程师会把DMA缓冲区当作“临时存放点”,然后在状态机里做数据搬运。最常见的错误代码长这样:// 错误示范:状态机里做memcpyvoidstate_machine_run(void){