1. 程式人生 > >微控制器程式構架--訊息驅動機制

微控制器程式構架--訊息驅動機制

做過windows win32開發的人員都知道,win32整個程式都是訊息驅動的。

在嵌入式系統裡面,訊息驅動的好處是可以真正實現模組化程式設計。此外,可以大大簡化程式的結構。方便程式的編寫。

由於訊息機制的弱實時性,因此在某些強實時性的場合下,通過中斷等方式來捕獲到實時事件,再將此實時事件封裝成訊息,

傳送到相應的模組進行處理。這樣程式結構不會耦合的那麼厲害。另外,通過訊息,可以方便的實現不同模組之間的通訊。

這對於改善程式結構是非常大的,也是程式能夠真正模組化的原因所在。

但訊息機制也有缺點,就是佔用ROM相應會增大一些,具體原因在於,在不同任務的訊息處理下,可能會存在重複編碼的地方。

另一方面,在人機互動的場合(如帶有液晶顯示屏或者數碼管的場合),使用訊息機制可以非常方便的進行程式的開發。

主程式構架如下:

while(1)
{
  SoftTimerMainLoop(); 
  
  //get message 
  MSG_GetMessage(&msg);
  
  //send msg to ui co-thread
  UIProcessMainLoop(&msg);


  //update display
  ST7920UpdateFromMem(); 
    }

介面(任務)程式如下:

static EUISTATE UINullScreen(SYSMSG* pMsg)
{
EUISTATE eUIState = E_UI_STATE_NULL;

    switch(pMsg->uMsg)
{
case MSG_UI_ENTER_SCREEN:
pMsg->uMsg = MSG_NULL;
break;

case MSG_UI_EXIT_SCREEN:
pMsg->uMsg = MSG_NULL;
break;

case MSG_UI_LOOP_SCREEN:
pMsg->uMsg = MSG_NULL; 
break;

case MSG_KEY:

break;

case MSG_TIMER:

break;

case MSG_USER_DEFINED:

break;
      }


 return eUIState;
}

在進入畫面,以及退出畫面的時候,以及當前畫面迴圈,均會有訊息產生。這樣就非常方便程式的編寫。此外,還可以接受按鍵,定時器,自定義訊息等等。每個任務只需要對自己感興趣的訊息作出處理即可。

任務通過訊息機制來進行處理,可以使得任務之間的耦合性降到最低,甚至可以在執行的過程中,動態的解除安裝某個任務,而不會對整個程式產生任何影響。這些都得益於訊息機制,也是模組化程式的真正實現方法。

相關推薦

微控制器程式構架--訊息驅動機制

做過windows win32開發的人員都知道,win32整個程式都是訊息驅動的。 在嵌入式系統裡面,訊息驅動的好處是可以真正實現模組化程式設計。此外,可以大大簡化程式的結構。方便程式的編寫。 由於訊息機制的弱實時性,因此在某些強實時性的場合下,通過中斷等方式來捕獲到實時事

事件驅動機制訊息驅動機制

事件:按下滑鼠,按下鍵盤,按下游戲手柄,將U盤插入USB介面,都將產生事件。比如說按下滑鼠左鍵,將產生滑鼠左鍵被按下的事件。 訊息:當滑鼠被按下,產生了滑鼠按下事件,windows偵測到這一事件的發生,隨即發出滑鼠被按下的訊息到訊息佇列中,這訊息附帶了一系列相關的事件資訊,比如滑鼠哪個鍵被按

淺談Windows SDK視窗程式訊息機制

Windows系統的訊息機制 一個庫函式(比如fopen),最終會呼叫作業系統的API來實現其功能,在Windows中,不僅庫函式最終會呼叫系統函式,系統函式反過來也會呼叫使用者函式,這種機制就是通過訊息來實現的。 我們假設程式發生了一項滑鼠點選“關閉”按鈕的操作,系統會發現這次操作,並將這次操作包裝成訊息

Windows程式訊息機制(三):訊息與程序間通訊

自定義訊息與程序間通訊 視窗程式可以接收自定義的訊息型別,前提是通訊的程序聲明瞭這種訊息型別,宣告的方法很簡單,WM_USER加一個值就可以了,一般加的值從0x400開始,其他的值已經被系統使用了。 實現一個完整的自定義訊息需要進行以下步驟:

Windows程式訊息機制(二):訊息有關的函式

不同視窗程式可以通過訊息進行互動,主要用到的函式如下: FindWindow 獲取一個視窗的控制代碼。 HWND FindWindow( LPCTSTR lpClassName,// 類名 LPCTSTR lpWindowName//

51微控制器之LCD1602的驅動程式

#include <reg52.h> #include "./delay/delay.h" #define LCDPORT P0 #define LCD_WRITE_DATA 1 #define LCD_WRITE_COM 0 sbit RS = P

Android應用程式訊息處理機制

1,建立執行緒訊息佇列 (1) Looper.prepareMainLooper() UI執行緒訊息佇列 MessageQueue public static void prepareMainLooper() { prepare(false); synchro

Windows程式訊息機制(一):視窗程式的建立

Windows視窗程式的實現 上面介紹了Windows下的訊息機制,系統傳送訊息到程式,程式接收到訊息後的處理統稱為視窗過程。 要實現視窗過程當然需要先建立一個視窗程式了。視窗程式的建立很簡單,主要分為以下幾個步驟: 註冊視窗類建立視窗及顯示視窗建立訊

字元裝置驅動程式——按鍵中斷poll機制

編譯環境 ubunt 16.04 arm-linux-gcc 4.3.2 linux-3.4.2 zj2440 poll的作用是把當前的檔案指標掛到等待佇列。 對於一個按鍵事件: 1、查詢方法:在while(1)中不斷迴圈呼叫read(fd, &key_val, 1)查詢,不

Android應用程式鍵盤(Keyboard)訊息處理機制分析

        在Android系統中,鍵盤按鍵事件是由WindowManagerService服務來管理的,然後再以訊息的形式來分發給應用程式處理,不過和普通訊息不一樣,它是由硬體中斷觸發的;在上一篇文章《Android應用程式訊息處理機制(Looper、Handler)分

事件驅動機制微控制器軟體中的應用

一、Windows的事件驅動機制     在Windows系統中,程式的設計圍繞事件驅動來進行。當物件有相關的事件發生時(如按下滑鼠鍵),物件產生一條特定的標識事件發生的訊息,訊息被送入 訊息佇列,或不進入佇列而直接傳送給處理物件,主程式負責組織訊息佇列,將訊息傳送給相應的

Windows事件驅動機制訊息迴圈

1、Windows事件驅動機制   我們當中不少使用VC、Delphi等作為開發語言的程式設計師是一步步從DOS下的Basic、C++中走過來的,而且大多在剛開始學習程式設計時也是先從DOS下的程式設計環境入手的,因此在習慣了DOS下的過程驅動形式的順序程式設計方法後,

事件驅動機制訊息迴圈

http://www.qudong.com/soft/program/C/rumenjiaocheng/20080317/1362.html       Windows系統是一個訊息驅動的OS,什麼是訊息呢?我很難說得清楚,也很難下一個定義(誰在噓我),我下面從不同的幾個方面

qt 訊息處理機制深入分析 (Qt訊息機制與window程式訊息的對比)

理解Qt訊息機制刻不容緩,那我們從對比傳統的windows訊息處理機制對比來說起; 只有知道QT底層的訊息處理、對我們理解並學習Qt有很大幫助; 下面我將對windows程式與Qt對比,並在核心程式碼處並給出註釋進行對比、方便學習。 注意重點看程式碼中的注視進行對比:!

180609-Spring之事件驅動機制的簡單使用

extend listener 支持 ati 關註 如果 ace publisher rip 文章鏈接:https://liuyueyi.github.io/hexblog/hexblog/2018/06/09/180609-Spring之事件驅動機制的簡單使用/ Spr

MFC訊息對映機制的理解

當窗體,控制元件,點選標題欄等時,會產生訊息,然後發給訊息處理函式進行處理,而訊息與訊息對映表是一一對應的關係,這個關係就是訊息對映表,根據根據訊息通過訊息對映表來查詢對應的訊息處理函式,這就稱為訊息對映機制。 而Windows有自己的訊息佇列,通過訊息迴圈,採用GetMessage來獲取訊

android 非同步訊息處理機制 — AHandler

1. 引入 ALooper、AHandler、AMessage 在 android multimedia stagefright 的框架程式碼中,通篇都是這幾個類的身影,所以熟悉 android 多媒體框架的第一步必須理解這幾個類的含義。 這幾個類是為了實現非同步訊息機制而設計的

Android核心技術-day04-01-網路圖片檢視器(安卓訊息迴圈機制)

package com.gaozewen.netimageviewer; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import and

JMS訊息可靠機制

ActiveMQ訊息簽收機制: 客戶端成功接收一條訊息的標誌是一條訊息被簽收,成功應答。 訊息的簽收情形分兩種: 1、帶事務的session    如果session帶有事務,並且事務成功提交,則訊息被自動簽收。如果事務回滾,則訊息會被再次傳送。 2、不帶事務的sess

Android softap連線斷開訊息通知機制(Android O)

版權宣告:本文為博主原創文章,部落格地址:https://blog.csdn.net/h784707460/article/details/79788344,未經博主允許不得轉載。 基於使用者需求、功耗優化等,Softap功能常常會在原生Android基礎上做一些定製,比如:STA的接