如何提高單片機程序的可靠性實時性測量準確性?
題主提到的單片機程序的可靠性、實時性,
軟件架構起著決定性的作用,單片機程序的軟件架構有以下幾點需要考慮:
1)分層分模塊
單片機程序至少分為三個層次,包括硬件驅動層,中間層,和應用層。
硬件驅動層主要實現(xiàn)對硬件的驅動控制,包括輸入按鍵檢測,AD采樣,UART/IIC/SPI的收發(fā),系統(tǒng)定時時鐘的產生、定時事件傳送、事件銷毀,輸入指示燈控制,LCD顯示控制,F(xiàn)LASH讀寫等等。
中間層作為硬件驅動層和應用層之間的中間處理模塊,負責將應用層控制硬件驅動層的公共邏輯抽象提煉,而設計成一些能脫離應用層獨立運行的模塊。比如UART數據的收發(fā),當應用層需要發(fā)送數據時,需要調用UART硬件驅動層的發(fā)送函數將數據填入發(fā)送緩存,再通過UART的發(fā)送中斷或DMA將數據逐一送出,當有多個應用層都需要往UART發(fā)送數據時,需要有隊列的機制,需要有先進先出的機制等等,而且有些應用層的UART數據需要有對端的應答,在超時沒有收到應答時,需要超時重發(fā)。當多個應用層模塊需要通過UART發(fā)送數據時,每一個應用層模塊都需要處理這樣的邏輯,將會使軟件異常臃腫無法維護。這個時候需要有一個串口數據的收發(fā)模塊,將所有應用層的數據填入隊列,通過狀態(tài)機按先進先出將報文從隊列取出,通過硬件驅動層的接口發(fā)送出去,同時通過狀態(tài)機處理數據應答,超時重發(fā)等機制,這樣一來,應用層的模塊只需要閉著眼睛調中間層的函數接口傳送報文,并且檢測中間層返回的狀態(tài),做一些事件處理即可。
應用層是根據產品的功能抽象,根據不同的功能模塊劃分,包括,設備設置、UI顯示、應用邏輯控制等等。每一個應用層的功能模塊都要配合狀態(tài)機實現(xiàn),狀態(tài)機的每一個狀態(tài)都有一個狀態(tài)函數,每一個狀態(tài)函數都有定時器,子狀態(tài)等等,之后就是按照邏輯根據不同的事件切換狀態(tài)。
這個問題太大了,未完待續(xù)