1. 程式人生 > >藍芽,溫控風扇製作過程問題記錄

藍芽,溫控風扇製作過程問題記錄

藍芽,溫控風扇,從星期1開始利用課餘時間到現在已有3天了。剛開始由於用的都是一些以前寫過的模板沒遇到什麼實質性的大問題,都是一些操作上的邏輯問題對程式改一下優化一下就行了,今天下午算是遇到了一個真正學知識的問題。

對於直流電機採用的是比較廣泛和成熟的PWM脈衝調製。程式單獨寫了並下載到微控制器裡單獨運行了一下,沒什麼問題於是就把他加到了整個工程裡面,這時問題出現了(我設計的風扇暫時有4個按鍵分別是一檔,二擋,自動和定時調時 並且定時使用的定時器0中斷)電機能旋轉但是任何按鍵都無效。當時就有點沒有頭緒了,期初以為微控制器兩個定時器中斷不能同時用不過想了想應該不是百度一下的確可以同時用。但是發現有個優先順序問題,但是我用的定時器0的優先順序是高於定時器1的。那麼問題究竟出在哪?

出去轉了一圈想想突然發現我的按鍵不是中斷產生的,並且PWM所需要的中斷頻率過高以至於微控制器幾乎都處於定時器1的中斷中導致所有按鍵都失效。找到問題所在那麼怎麼解決?首先我是在每一個按鍵按下後關閉中斷等到按鍵處理程式結束後再開啟中斷,這樣就能使按鍵起到作用。修改程式後發現效果不是很理想整理了一下思路發現我的程式時自上而下執行,執行到按鍵程式處如果這時正好有按鍵按下則進行按鍵處理,如果沒有按鍵按下則繼續往下執行。每個按鍵後面都要關中斷然後在開啟這樣很容易亂於是我想整個程式大部分時間無按鍵操作,如果把按鍵操作集中於一個函式然後在函式開始前關中斷在函式結束後開中斷這樣應該好一點。在此期間我又把溫度顯示函式加到了期間防止無法讀寫溫度。經過測試的確效果要好溫度也能更新但是有個缺點就是按鍵時間不能太短要稍有延時否者還是會被程式遮蔽掉。

這次問題是第一次碰到,讓我認識到了中斷的威力和中斷優先順序的問題。


這兩天把實物做了一下,把程式綜合了一下執行後發現有許多BUG,程式執行並不理想老是出現一些意想不到的情況。接下來並沒有忙著加入藍芽程式而是對原有的程式進行除錯。的確寫一個小程式簡單,但是把許多的小程式綜合成一個大的程式需很難,他需要考慮到各個程式的影響並且讓程式的邏輯更為合理。

經過不斷地修改除錯,最終的結果還算滿意,但是感覺我寫的程式在層次上有些混亂不明確。我想這應該是事先沒有做好程式規劃導致的,但是我又感覺一些邏輯控制上的關係事先並不能想到,很多是在實際執行中發現的,然後再去修改新增程式導致程式有點混亂。

除錯到最後程式報了幾個警告

MULTIPLE CALL TO SEGMENT,以前並沒有遇到過,網上搜了一下原因發現問題的原因是在主迴圈裡呼叫了一個函式,而在中斷服務中,你又一次呼叫了同樣的函式。這樣當主迴圈執行到該函式中時,一旦產生中斷,則在中斷裡又再次呼叫該函式!而使得該子函式發生了重入。解決辦法是把程式內容複製一下修改了程式名字。