欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3491|回復: 23
收起左側

關于節約單片機系統CPU算力

[復制鏈接]
ID:155811 發表于 2022-3-31 12:17 | 顯示全部樓層 |閱讀模式
減少cpu的運算時間,就可以降低晶振的頻率也能有相同的效率,所以更節能.


用 時鐘芯片制作 數碼管單片機時鐘,常規做法是,每個主循環 從時鐘芯片讀一次整個時間,
然后把時間數據從bcd 轉換成 十進制, 再把十進制的每一位分解成個位數,
再刷新數碼管緩存,顯示時間.


正確的做法, 程序啟動時讀一次 時鐘芯片的時間, 如果數碼管不顯示秒,
每隔 大約一分鐘,讀一次 時鐘芯片的分數據, 這樣其實不會積累誤差, 然后轉換分鐘數據,
刷新數碼管的分 緩存.

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:401564 發表于 2022-3-31 23:57 | 顯示全部樓層
對于一個數碼時鐘,1MHZ以上的晶振,隨便一個8位單片機都是一件輕松的事,壓根就不需要節約什么CPU算力,節約出來干嘛?你怕單片機累了?
效率這個東西要用在需要的地方
讀取時間是一直在讀取,基本是沒停過,如果有按鍵,掃描完按鍵,顯示完了就讀取
一分鐘讀取一次,就很容易給人一種"你這個鐘比北京時間慢一分鐘"的感覺
回復

使用道具 舉報

ID:47286 發表于 2022-4-1 09:28 | 顯示全部樓層
我認為節約算力的目的是干更多的事 而不是沒事就讓cpu閑著 一個單片機省的電還沒一個線性穩壓芯片自己消耗的多 省它有啥意義
回復

使用道具 舉報

ID:299872 發表于 2022-4-1 10:07 | 顯示全部樓層
這也是夠省的
回復

使用道具 舉報

ID:155811 發表于 2022-4-1 12:15 | 顯示全部樓層
精益求精還有人說不應該
回復

使用道具 舉報

ID:47286 發表于 2022-4-1 13:41 | 顯示全部樓層
himanzj 發表于 2022-4-1 12:15
精益求精還有人說不應該

這不是應該不應該的問題 是樓主沒定義前提 或者說沒說明如此操作的出發點是什么

cpu這東西只要上電就不會停 即使你什么都不干 它也在工作 也在消耗能源 我們先不說麒麟乃至i5 i7之類的東西 那是另外一種情況 只說51到stm32這類的小東西

我實測過 除了休眠模式 即便是待機模式 耗電量都小不到哪去 就說待機模式 cpu耗電量能小一半 看著很大 但問題是 cpu一共才消耗幾毫安 小一半這點節能相對于外圍零件的耗電量幾乎什么都不是 亮一顆LED都能秒殺

能耗上不考慮的話 就說到算力的問題 前面說了 這種小東西的算力總共就那么點 節省算力的目的是什么 為了降頻么 那你一個單片機就只去讀時鐘芯片是么 那是省還是浪費 如果不僅僅讀時鐘 還要顯示時間 或者采集ADC 或者其它什么什么吧 你覺得能耗會省下來么 相反可能因為降頻引起其它工作遲滯 對么 節省算力的目的是為了不耽誤其它工作 這個邏輯算合理吧 于是 結論就明確了 只要不影響其它工作就無需考慮增加讀時鐘的間隔

就算放寬間隔 不需要計數器么 計數器會不斷計數吧 那不消耗能源么 那不是等于閑著還更多消耗能源么 不是更浪費了么 正常的思路是如將算力發揮到極限 至少我個人編程的思想一直是只要它還干得動 就給它找更多的活干

很多設計實例都在努力降頻 努力節省算力 但那不是目的 只是一種選擇 因為能源限制 比如用電池又需要很長續航 只能在算力和能耗上取舍 樓主的說法也沒錯 但我開始就說了 這不是錯不錯的問題 是前提問題 而這點樓主并沒說明 對吧 既然沒前提沒范圍 有別的看法不正常么
回復

使用道具 舉報

ID:155811 發表于 2022-4-1 15:46 | 顯示全部樓層
按你的說法,程序都不要優化了,反正都一樣
回復

使用道具 舉報

ID:155811 發表于 2022-4-1 15:54 | 顯示全部樓層
正常的人,應該從這例子歸納從方法,再推廣應用,不是程序不應該優化,而噴人
回復

使用道具 舉報

ID:123289 發表于 2022-4-1 16:44 | 顯示全部樓層
【減少cpu的運算時間,就可以降低晶振的頻率也能有相同的效率,所以更節能.】
不贊同:
晶振的頻率是死的,不可以隨意降低的。如果強行將12M的換成6M的,那么整體速率都減一倍,合適嗎。

【用時鐘芯片制作數碼管單片機時鐘,常規做法是,每個主循環 從時鐘芯片讀一次整個時間,
然后把時間數據從bcd 轉換成 十進制, 再把十進制的每一位分解成個位數,再刷新數碼管緩存,顯示時間.
正確的做法, 程序啟動時讀一次 時鐘芯片的時間, 如果數碼管不顯示秒,
每隔 大約一分鐘,讀一次 時鐘芯片的分數據, 這樣其實不會積累誤差, 然后轉換分鐘數據,
刷新數碼管的分 緩存.】

不贊同:
1、讀不讀時鐘芯片的耗電是一樣的,不一樣只發生在:時鐘芯片有沒有休眠模式,只有芯片休眠時才省點電。
2、即使CPU不運行“從bcd 轉換成 十進制, 再……”的程序,CPU的耗電也是一樣的,除非你讓進入CPU休眠模式。
所以,所謂“正確的做法……”,依據就不足了。
樓主的提法,少了讀“時鐘芯片”的次數,但需要增加了輔助的計時程序,也省不了多少CPU的運行時間。

建議的省電做法是:
1、盡量讓所有的芯片,多多地處于休眠狀態。本例中,盡量讓“時鐘芯片”、“CPU”長期處于休眠狀態。
2、不要主動去讀“時鐘芯片”,而是讓“時鐘芯片”在需要時間變更時,產生中斷,換醒CPU,這時CPU再讀時間,譯碼、切換顯示,完成后再次進入休眠。
3、其實耗電最多的是【數碼管】,它遠大于樓主討論的。
相對于【數碼管】的耗電,少讀幾次“時鐘芯片”,或省點運行時間,意義不太大。
個人習慣上,主循環程序的最后一句,是讓CPU休眠的。
回復

使用道具 舉報

ID:401564 發表于 2022-4-1 16:58 | 顯示全部樓層
himanzj 發表于 2022-4-1 15:46
按你的說法,程序都不要優化了,反正都一樣

你這叫優化?
關鍵是,你把節省出來的單片機時間拿來干嘛了?并沒有呀,就算是帶溫度顯示,自動調節亮度,GPS自動授時,整點播報,鬧鐘設定,隨便一個1MHZ的8位單片機,做起這種事情來,那也是輕松到不行的一件事,那"優化"有什么意義?
而用你的方法,只會讓一個產品更加降低檔次
你不想一下,一分鐘讀取一次,時間顯示就很容易有一種"慢一分鐘"的顯示效果,你沒有考慮過這個?對于用戶而已,鐘表能跟北京時間一樣準,那才是他們關心的
至于單片機累不累,他們會考慮這個?
一秒鐘讀取一次跟一分鐘讀取一次有什么區別?單片機整體運行會慢嗎?不會呀
回復

使用道具 舉報

ID:883242 發表于 2022-4-1 17:23 | 顯示全部樓層
大家都沒注意到樓主最大的漏洞在“每隔 大約一分鐘,讀一次 時鐘芯片的分數據”這句話嗎?

這個1分鐘是從哪里來的?還不是單片機定時器產生的嗎?定時器工作的時候單片機又不能休眠,只能瞎j8跑,根本就沒節約什么算力,更不可能帶來省電的效果。
回復

使用道具 舉報

ID:155811 發表于 2022-4-1 17:38 | 顯示全部樓層
Hephaestus 發表于 2022-4-1 17:23
大家都沒注意到樓主最大的漏洞在“每隔 大約一分鐘,讀一次 時鐘芯片的分數據”這句話嗎?

這個1分鐘是從 ...

大約一分鐘好嗎, 不是要你再用一個 時鐘準確計時一分鐘
回復

使用道具 舉報

ID:155811 發表于 2022-4-1 17:40 | 顯示全部樓層
dzbj 發表于 2022-4-1 13:41
這不是應該不應該的問題 是樓主沒定義前提 或者說沒說明如此操作的出發點是什么

cpu這東西只要上電就 ...

按你的說法,我還是把程序改回原來的, 每個主循環讀一次整個時間,
回復

使用道具 舉報

ID:883242 發表于 2022-4-1 17:45 | 顯示全部樓層
himanzj 發表于 2022-4-1 17:38
大約一分鐘好嗎, 不是要你再用一個 時鐘準確計時一分鐘

只要你的單片機還在瞎跑,不管是精確還是大約,都不是節約算力。
回復

使用道具 舉報

ID:401564 發表于 2022-4-1 23:20 | 顯示全部樓層
himanzj 發表于 2022-4-1 17:38
大約一分鐘好嗎, 不是要你再用一個 時鐘準確計時一分鐘

好幾個網友都在反對你的建議,你還不知道問題出現在哪里嗎?
回復

使用道具 舉報

ID:47286 發表于 2022-4-2 01:37 | 顯示全部樓層
himanzj 發表于 2022-4-1 17:40
按你的說法,我還是把程序改回原來的, 每個主循環讀一次整個時間,

如果你只是讀時鐘這么點事 改回去沒什么問題

讀時鐘的消耗主要是io口模擬I2C或者spi通訊時必須的延時 不管用for 用nop還是用什么 反正都要死等一會 那么短的延時用計時器沒意義 一般就是死等 這時候cpu什么都干不了 累積多了對進行其它任務有影響 如果用硬件spi或者i2c 除非你打算把51當系統用 否則什么都不用考慮

靠減少指令節能基本就是然并卵的事 標壓i7也不會這么干 何況一個mcu 耗電量還沒一個紅led大
回復

使用道具 舉報

ID:47286 發表于 2022-4-2 01:53 | 顯示全部樓層
himanzj 發表于 2022-4-1 17:38
大約一分鐘好嗎, 不是要你再用一個 時鐘準確計時一分鐘

是為了反對而反對么

不管你怎么大約 就算你非說10秒就是1分鐘 那也得有個準數吧 那這數怎么來的 死循環么 計時器么 或者其它什么算法 哪樣不開銷算力

我們的茅盾在于 你認為cpu什么都沒干就省電了 而我認為這是最大的浪費 因為不管你讓不讓cpu干活 它都在不停的干活 如果你不用它 那就是白白的耗電而沒創造任何價值 哪怕是沒價值的價值也沒有

大cpu主動降頻節能是因為本來它耗電量大 熱功至少要20W以上吧 這還是節能型的 別說51 stm32能比么 而它的算力遠遠超過大部分應用的消耗

移動電子頻繁休眠節能并不是它喜歡 是因為目前的電池技術還不夠給力 是為了更長時間工作而做出的妥協 每次休眠要保存環境 每次起動要恢復環境 這些都是算力開銷 比不休眠大太多了 這也說明單純靠減少指令實現節能是多么不靠譜
回復

使用道具 舉報

ID:57657 發表于 2022-4-2 06:47 | 顯示全部樓層
配置 CLK_DIV 寄存器,即可降低功耗。
功耗取決于一個時鐘周期有多少晶體管狀態改變,以及開關頻率。
回復

使用道具 舉報

ID:155811 發表于 2022-4-2 12:22 | 顯示全部樓層
dzbj 發表于 2022-4-2 01:53
是為了反對而反對么

不管你怎么大約 就算你非說10秒就是1分鐘 那也得有個準數吧 那這數 ...

,又轉移話題說了一大堆,可惜已經%%了
回復

使用道具 舉報

ID:47286 發表于 2022-4-2 13:34 | 顯示全部樓層
himanzj 發表于 2022-4-2 12:22
,又轉移話題說了一大堆

好吧 那就簡單點 你的想法是然并
回復

使用道具 舉報

ID:883242 發表于 2022-4-2 14:29 | 顯示全部樓層
himanzj 發表于 2022-4-2 12:22
,又轉移話題說了一大堆,可惜已經%%了

%%的是你。連實測數據都沒有就拍腦袋說。
回復

使用道具 舉報

ID:155811 發表于 2022-4-2 16:37 | 顯示全部樓層
Hephaestus 發表于 2022-4-2 14:29
%%的是你。連實測數據都沒有就

你怎么知道我沒有實測 ,是你自己不拿證據說話
回復

使用道具 舉報

ID:883242 發表于 2022-4-2 21:19 | 顯示全部樓層
himanzj 發表于 2022-4-2 16:37
你怎么知道我沒有實測 ,是你自己不拿證據說話

有實測數據拿出來啊,拿不出來%%?
回復

使用道具 舉報

ID:155811 發表于 2022-4-4 14:27 | 顯示全部樓層
dzbj 發表于 2022-4-2 01:53
是為了反對而反對么

不管你怎么大約 就算你非說10秒就是1分鐘 那也得有個準數吧 那這數 ...

我都程序實現了,你還糾結一分還是10秒,
還有你降頻節能是一方面,難道就可以不要優化程序了,
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表