首頁>Club>
我在一個小公司裡面主要做微控制器的開發,感覺自己寫的程式演算法很簡單,想要提高自己的程式碼演算法能力,又沒有其他人可以討論和學習,這種情況下,如果提高自己的程式碼治量?
8
回覆列表
  • 1 # ljbskx

    微控制器控制大部分是面向硬體的,關於這些物理硬體的控制,最重要的就是調節速度和精度,表現在微控制器內部演算法上,我認為就是時間和空間的合理運用,而這些對演算法的要求是什麼呢,或者說作為微控制器開發者來說,應該怎麼樣考慮自己的微控制器程式呢?

    第一,程式結構

    我知道你肯定不會想去仔細研究資料結構,那太抽象了。在這裡我直接告訴你,基於“狀態機”的程式結構更加適合微控制器,確切的說是有限狀態機。狀態機程式設計技術將直接促使你解決程式的時間問題,並且程式結構可大可小,普通狀態機和層次式狀態機能讓你對絕大多數專案手到擒來。當然狀態機程式設計技術也是需要學習的,但這比你直接去學資料結構要輕鬆的多。

    第二,使用適合的演算法

    我們程式設計時要明白一個道理,再多複雜的演算法也不能證明你的程式是一個好程式,那什麼才是呢?是簡潔明瞭和可靠穩定。大道至簡放在程式設計上不是一句空話,同樣一個氣泡排序演算法,有的人寫出來死板的很,有的人卻能獨具效率,這是對演算法的理解高度不同。我認為與其學習更為複雜的控制演算法,不如加深自己對現有演算法的理解。通樣的PID演算法程式,有的人能加上積分分離,有的人能用上環境自適應,這裡面差別不可謂不大啊。

    最後希望你能早日從自己的工作中形成自己獨到的理解,精益求精。

  • 2 # 老馬識途微控制器

    多做練習,如果你現在用的C語言開發微控制器,想提高自己的演算法能力,那建議你多看看C語言的常用演算法,然後用單片機板子上的LCD,LED等來驗證自己的演算法程式。

    舉一些常用演算法例子吧,你可以試試在微控制器上實現。

    一、嵌入式C語言常用演算法舉例

    演算法就是為解決某一特定問題而採取的具體有限的操作。具有有窮性、確定性、可執行性、領個或多個輸入以及一個或多個輸出。

    1、氣泡排序演算法

    將一串資料使用冒泡法進行排序。

    將排序後的資料按照從大到小或者從小到大的順序在LCD液晶上顯示出來。

    2、迴文演算法

    檢測字串是否是迴文字串,如果是迴文字串,則點亮LED,如果不是,則蜂鳴器響一下。

    3、冪運算

    程式中隨意定義一個無符號整型資料N,然後計算出1*2*3*4*......*N的結果,透過液晶顯示出來結果。

    4、加法運算

    程式中隨意定義一個無符號整型資料N,然後計算出1+2+3+4+......+N的結果,透過液晶顯示出來結果。

    5、求直角三角形邊長

    用正弦函式,餘弦函式,透過已知的斜邊長度計算出兩個直角邊的長度,透過液晶顯示出來。

    6、在排序好的陣列中插入元素

    程式中先定義一個排好序的陣列,然後用隨機數產生函式產生一個隨機數,把這個轉陣列原有的排序方案插入到陣列中,透過液晶顯示該隨機數位於陣列的第幾個元素。

    7、字串的拼接

    程式中定義兩個字串,然後將它們拼接為一個字串,透過液晶顯示出來。

    8、閏年判斷

    編寫一個判斷閏年的程式。

    9、字串查詢

    在一個現有字串中查詢另一個字串,如果找到則點亮LED,否則蜂鳴器響。

    10、輸出三位水仙花數

    所謂水仙花數,是指一個三位數,其各位數字立方和等於該數本身。

    例如,153是一個水仙花數,因為153=1的3次方+5的3次方+3的3次方。

    11、計算某個日期對應該年的第幾天

    例如:編寫程式計算2018年5月1日對應2018年的第幾天。

    12、輸出月份對應的英文名稱

    例如:編寫程式計算2018年5月對應的英文名稱。

    二、常用數字濾波演算法

    編寫一個AD轉換程式,分別使用下面的濾波演算法實現濾波功能。

    1、程式判斷濾波2、中值濾波3、算術平均濾波4、去極值平局濾波5、滑動平均濾波6、滑動加權濾波7、一階滯後濾波

  • 3 # 程式設計鎮魔司
    0x01 演算法只有合適不合適,沒有簡單複雜的區分。

    微控制器資源有限,稍微大容量的微控制器也不過512K的RAM空間,並不適合特別複雜的演算法,保證演算法可靠的執行,在效能受限的工作頻率下實現需求的功能才是第一要務。

    舉個簡單的例子,將一個長度為10的陣列清零,很多同學習慣使用memset這個函式,然而使用這個函式需要呼叫函式庫,編譯出來的bin檔案需要包含庫,所以會大大增大bin檔案的大小,這個時候使用一個for迴圈來賦值看起來“low”,但是卻是最合適的做法。

    0x02 邊讀原始碼邊實戰才是王道

    書籍推薦《資料結構》,程式碼推薦FreeRTOS的原始碼,後面會做一個嵌入式軟體演算法的學習連載教程,歡迎關注。FreeRTOS的程式碼很多精妙的設計,讀懂吸收之後,可以在自己的專案中模仿實現,徹底掌握,比如學到訊息管理機制的時候可以在自己的微控制器上實現一個佇列控制器,用定時器來觸發分發任務,做完之後可以說訊息管理對你來說不在話下了。

  • 4 # 嵌入式宏思微想

    微控制器中優質的演算法,是時間和空間平衡的演算法,即考慮執行空間和執行效率。空間少頻率低是微控制器的致命硬傷,對於演算法來說。

    如何提高微控制器的演算法質量?首先要充分理解需求,即演算法要解決什麼問題。其次要充分運用手法,即怎樣用最適合的指令實現功能。最後要充分最佳化,即怎樣精簡演算法,從邏輯方面,資料方面,語句表達方面,多思考多實踐。

    系統頻率低,則註定不能在微控制器上跑複雜的運算,怎麼辦?通常運用對比的方法,即把運算部分放到PC程式上執行,將結果形成一個表,微控制器上只需做對錶運算即可,根據輸入直接匹配輸出結果。

    如果你想喜歡演算法,可以考慮換個平臺,跳槽到演算法公司,那裡才是施展拳腳的天地。

  • 中秋節和大豐收的關聯?
  • 一線城市多少錢才能財務自由?