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

才发现我可真会浪费CPU资源!

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2025-06-17 20:55:19
已绑定手机

40

主题

296

回帖

900

积分

高级会员

积分
900
发表于 2025-3-8 15:59:16 来自手机 | 显示全部楼层 |阅读模式
都是delay害的。
大概盘算了一下,自己写的程序有效的CPU时间还不到30%
时间都去哪了?用在等待上了。

你说硬件用了吗,确实用了。但是坛子里大佬也解释了,在单任务一条线走到底的条件下,硬件
(比如,DMA)并不能解放CPU。
原因是,你还在等。

oled要while(send())
flash要while(!busy())
串口要while(!TI)
跑定点计算嫌他慢,按键扫描的时候却不得不用个几十毫秒delay。一用一个不吱声的
Cpu都用来等了!(有时候为了给人用就是得等,几百毫秒几百毫秒的等,最越离谱的,直接阻塞死,不操作不往下走的那种)
要是能在按键扫描的delay里读几下flash,fladh等时候算几个数,算完再刷一下屏,自然flash也不busy了,屏也刷完了,按键也等好了。多好。

RTOS存在的价值。让自己把时间充分利用起来。虽然比较麻烦,快快行动起来,别让你和你的CPU再等待!!



回复

使用道具 举报 送花

3

主题

698

回帖

107

积分

等待验证会员

积分
107
发表于 2025-3-8 16:03:00 | 显示全部楼层
在嵌入式开发中,CPU资源浪费常源于同步等待操作,如`while`循环等待硬件响应。此类操作虽简单直观,但严重降低CPU利用率。为优化性能,建议采用以下策略:

1. **异步编程**:通过中断或事件驱动机制,避免CPU空转。例如,使用串口接收中断代替`while(!TI)`,释放CPU处理其他任务。

2. **硬件加速**:合理配置DMA等硬件外设,减少CPU干预。例如,使用DMA传输数据至OLED或Flash,避免`while(send())`阻塞。

3. **任务调度**:引入RTOS(实时操作系统)或多任务机制,提升系统并发性。将长时间等待任务置于低优先级,确保高优先级任务及时响应。

4. **定时器优化**:使用硬件定时器替代软件`delay`,精确控制时间间隔,避免CPU无谓等待。

通过上述方法,可显著提升CPU利用率,优化系统性能。

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

使用道具 举报 送花

3

主题

698

回帖

107

积分

等待验证会员

积分
107
发表于 2025-3-8 16:08:00 | 显示全部楼层
在嵌入式开发中,CPU资源的低效利用往往源于同步阻塞操作,如`while`循环等待硬件状态。这种设计虽简单,但极大浪费了CPU周期。建议采用异步和事件驱动架构,通过中断或DMA传输来释放CPU资源,提升系统响应性和吞吐量。例如,使用DMA进行数据传输时,CPU可继续执行其他任务,而非空转等待。此外,合理调度任务,避免长时间`delay`,转而使用定时器或状态机机制,可显著优化CPU利用率。通过这些技术手段,既能确保硬件操作的完成,又能最大化CPU效能,实现高效的系统设计。

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

使用道具 举报 送花

3

主题

698

回帖

107

积分

等待验证会员

积分
107
发表于 2025-3-8 16:08:00 | 显示全部楼层
在嵌入式开发中,CPU资源浪费问题普遍存在,尤其是在单任务模式下,硬件资源的利用效率往往受限于同步等待机制。您提到的`while(send())`、`while(!busy())`等轮询操作,本质上是对CPU资源的低效利用,尤其是在等待外设响应的过程中,CPU处于空转状态。

为解决这一问题,建议采用以下优化策略:
1. **中断驱动**:将外设操作改为中断模式,避免CPU轮询等待,释放CPU资源用于其他任务。
2. **DMA优化**:在支持DMA的场景下,合理配置DMA通道,减少CPU直接参与数据传输的频率。
3. **任务调度**:引入多任务机制(如RTOS),将阻塞操作拆分为异步任务,提升CPU利用率。
4. **延时优化**:尽量减少`delay()`的使用,采用定时器中断或事件驱动的方式替代。

通过这些优化,可以有效提升CPU利用率,减少资源浪费,同时提高系统响应效率。

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:463
  • 最近打卡:2025-06-17 17:53:48

33

主题

2448

回帖

5174

积分

论坛元老

积分
5174
发表于 2025-3-8 16:28:45 | 显示全部楼层
DMA只是说在数据搬运的时候可以不用CPU来干了,,把数据准备好,CPU就可以干其他的事情。。OLED刷屏,串口发送都可以节省CPU的时间。。flash的操作这个时间CPU是不工作的,是必须要等的。
按键扫描也早就有非阻塞式的方法。。

即便是用上了系统,工程不复杂的时候,你会发现运行最多的任务是空闲任务
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:565
  • 最近打卡:2025-06-17 07:50:58
已绑定手机

50

主题

1816

回帖

3134

积分

论坛元老

积分
3134
发表于 2025-3-8 20:04:24 | 显示全部楼层
可以在等的时候干点其它事
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2025-06-17 20:55:19
已绑定手机

40

主题

296

回帖

900

积分

高级会员

积分
900
发表于 2025-3-8 21:50:04 来自手机 | 显示全部楼层
_奶咖君_ 发表于 2025-3-8 16:28
DMA只是说在数据搬运的时候可以不用CPU来干了,,把数据准备好,CPU就可以干其他的事情。。OLED刷屏,串口 ...

spiflash。
等的时间好长啊😦
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2025-06-17 20:55:19
已绑定手机

40

主题

296

回帖

900

积分

高级会员

积分
900
发表于 2025-3-8 21:52:03 来自手机 | 显示全部楼层
_奶咖君_ 发表于 2025-3-8 16:28
DMA只是说在数据搬运的时候可以不用CPU来干了,,把数据准备好,CPU就可以干其他的事情。。OLED刷屏,串口 ...

确实,简单的了话就没必要了。
但就是这些个比较高复杂的应用,不得不了。不然按我那垃圾代码真的就只有30%有效CPU利用
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:556
  • 最近打卡:2025-06-17 20:54:18

21

主题

564

回帖

2870

积分

金牌会员

积分
2870
发表于 2025-3-9 08:34:51 | 显示全部楼层
我看 从单片机基础到程序框架里面 按键检测用的是中断计数的方法,
1ms中断检测到按键按下给标志位置1计数变量开始计数,20~30ms后再看按键是否按下,
还按下就判定为按键按下,返回对应的按键数值,如果没有按下就标志位清零、计数变量清零
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 00:11 , Processed in 0.169690 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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