「靈敏」這個詞有點模糊。對於單片機來說,應該是指實時性,差不多就是響應事件的速度,所以從這個角度來講,不靈敏只是指實時性比較差。但對於人來說,大約100ms的時間才能明顯地感覺到。單片機響應一個事件頂多幾個毫秒,只要程序設計合理,絕大多數情況下都不會讓人明顯地感到「不靈敏」。

過多程序對單片機的硬體響應機制影響不大,比如前後台系統中,不管後台任務計算量多大,CPU都會立即響應中斷,但中斷事件怎麼傳遞到後台處理,就是程序的事兒了。

所以影響靈敏度的因素不是計算量大不大,而是能不能足夠快地處理被響應的事件,這一點和電腦類似,雖然跑的程序多(就算多到死機),但移動一下滑鼠,電腦依然可以立即捕獲這個事件,並在屏幕上移動指針的位置。


先打個俏皮,只要單片機沒降低頻率在程序上就應該是一直都很靈敏的,因為執行速度基本恆定~

正經起來了:你所謂的靈敏應該是這個樣子吧:代碼寫了很長,需要處理的東西很多,在宏觀上系統的反應變慢了。

那要是這麼理解對也不對:

第一:

如果程序寫的都是一坨坨的if else或者switch,程序肯定會走分支的,代碼寫的長,分支不走也不佔時間。

第二:

如果你是在51裡面做複雜的數學運算,比如軟浮點,求三角,求pi,大量的矩陣運算這些,的確需要很對時鐘來進行這些計算,甚至要佔用大量的ram。51做這些不是不行,只是不太適合。

但其實對人來說強度很高的計算,只要程序寫的好,對單片機根本不是個事兒,畢竟那玩意叫「單晶元計算機啊」,手算需要1min還可能算錯的東東,單片機每秒能給你跑100個來回,從這個意義上,算不算很靈敏?

靈敏取決於人的定義,從函數執行,到給出結果,所用的時鐘數越多,一定越慢,但是如果這個慢是可以接受的,在正常周期內的,甚至是特意設計的(極端例子:軟體delay),那麼系統就還是靈敏的,因為符合設計要求。

第三個:

這是一個項目選型問題:數學運算已經不是51的強項了,如果真的需要算力要求,那要就換單片機了。


不是導致不導致的問題,CPU頻率這麼低,做很多操作,更何況很多無謂的操作,還要它滿足實時性要求高的場合,你覺得可能嗎?這個問題的回答是不靈敏是必然的結果。


首先,選型非常重要。

中國人叫單片機,單晶元計算機,但實際上,我們通常把這玩意叫MCU 微型控制單元,ARM結構的晶元通常叫做MPU,微處理器,STM32這種性能介於MCU和MPU之間,可以看作是魔改MCU或者超乞丐版MPU。從名字可以看出,單片機更看重的是控制能力,51單片機的位指令非常優秀,對於控制程序的編寫確實更方便實用,我通常把MCU看作是具有一定數學邏輯能力的控制單元,而不是具有控制能力的CPU。

基於上述觀點,將大量的浮點、三角函數、指數、矩陣甚至圖像處理扔給單片機是不合適的,STM32可能都算不過來。單片機只適合終端控制,PID、卡爾曼等簡單的計算。

第二,那就是你程序的問題了,如果你對於用戶輸入採用的是查詢方式,某些函數還特別長,新手還寫while等待for循環等待,那麼,系統在響應用戶操作的時候,確實顯得非常遲鈍,甚至用戶操作無響應都是可能的。

對於用戶輸入操作,應該是中斷配合狀態機完成,以此大幅提高系統的響應能力,雖然部分步驟可能計算需要很長時間,但是用戶操作響應體驗是可以的。

對於你非要用51做個計算器算老長的浮點,解函數,那麼你按下等號後等老長時間,那就沒辦法了,那是你應用造成的,那得回上一話題,更換方案了。

第三,任意操作都是有對應響應機制的,有的操作優先順序會比較低,一直被高優先順序的應用佔用,有些操作不影響系統功能安全,屬於可有可無的狀態,那這些操作的響應,你就不能指望它有多靈敏


靈敏,取決於應用的響應速度。

51 CPU的速度是全速跑,不存在降頻跑的方式,一旦全速就是一直全速。

影響應用響應速度的源頭,是軟體的設計與編碼,要根據實際場景理解去優化。


推薦閱讀:
相关文章