久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

在編程中基于事件驅動的好處

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年03月15日   【字體:

在這幾天的編程里,我發現了一個程序如果是基于事件驅動的,那么編程起來將會很簡單。比如在輸入命令行遇到回車時向框架發送一個ON_CMD_OK消息,那么框架就會立即處理ON_CMD_OK消息,而無需再去檢測命令輸入到了什么地方,在框架定時器到達時,框架也會呼叫我們事先約定好的處理程序,為我們省略了很多細節的麻煩。 要編寫基于事件的程序,首先需要理解函數指針,和char指針一樣,它保存了一個函數的地址,調用指針指向的函數和調用函數一樣。例如:(我的例程是這樣的) typedef void (*PROC)(MESSAGE_STYLE style,MESSAGE param);// 定義函數類型,形參為MESSAGE枚舉; PROC fun; static void nullFunction(MESSAGE_STYLE style,MESSAGE param)// 空函數 { printf("nullFunction is called ."); } void main() { fun = nullFunction;// 將指針指向nullFunction; fun(ON_KEYDOWN,WM_0);// 通過指針調用函數 } 那么,在這個主程序里,nullfunction將收到ON_KEYDOWN和WM_0,意思是按鍵0被按下,調用nullFunction處理。 ON_KEY_DOWN是一個我們預先定義的消息類型枚舉,WM_0也一樣。 當然了,在實際的編程里不會像這個那么簡單,我們需要一個數組來保存指針,然后將消息逐個派遣,讓想知道這個消息的所有程序都能知道這個按鍵被按下了,然后進行相應的處理。 是否明白點了呢?.... 后來我有個重大發現 一直以來,我都是使用形參來傳遞消息參數,我的PROC原來是這樣定義的:PROC (*fun)(MESSAGE_TYPE type, MESSAGE param); 在我的Delegate里,消息通過send()函數將會歷遍所有消息回調,如果我在第一個回調里增加了一個回調,那么在這個回調結束后,新增加的回調也會收到這個消息,這不是我希望的結果(我在菜單里選擇了2號菜單,而2號菜單是個命令提示符,那么在增添命令提示符后字符'2'這個消息會傳遞給CMD,那么在進入CMD程序之前,CMD實際上已經添加了2這個字符在命令行里)。經過我的反復思考,我參考了C#的做法,把后面兩個參數改為引用類型,改為:PROC (*fun)(MESSAGE_TYPE &type, MESSAGE ¶m); 那么在第一個回調里增加另外一個回調的同時,把param設置為WM_NULL,就不會發生上面的情況,而且將更加靈活,我增加了WM_HANDLED,在框架檢測到這個消息后,會放棄之后的回調,因為框架已經知道這個消息已經不再需要后面的程序處理了。呵呵,總算解決了一個問題。也算是從C#里發現的一個重大收獲。經過這樣的改造,CPU占用率更低了,而且深度的內存堆棧也少了些,可以使用更多的內存做別的任務。 八卦一下 PT2313。這是我的第二個AVR的作品。我用MEGA8是因為它的功能深深的吸引著我。以前用51的時候,I2C需要單獨來編寫一個程序來驅動,ADC需要外置。現在好了,MEGA8為我解決了這個問題,使得我現在的版本比以前有了很大的進步,無論是在體積上還是性能上都有顯著的提高。讓大家來分享一下

關閉窗口

相關文章

主站蜘蛛池模板: 国产一区二区a | 国产精品久久国产愉拍 | 国产成人精品一区二区 | 国产一区二区精品在线观看 | 鲁视频| 国产精品亚洲精品 | 精品国产一区二区三区免费 | 欧美日韩国产在线 | 青草久久免费视频 | 一区二区国产精品 | 成人网在线 | 亚洲精品www久久久久久广东 | 天天爽夜夜爽精品视频婷婷 | 国产一区二区免费 | 午夜视频精品 | 欧美一区二区三区的 | 亚洲综合激情 | 久久综合一区二区 | 成人在线看片 | 超碰97人人人人人蜜桃 | 国产精品91久久久久久 | 亚洲一级毛片 | 狠狠久久综合 | 国内精品一区二区三区 | 91亚洲欧美| 日本久久网站 | 国产精品久久国产精品久久 | 亚洲国产成人在线观看 | 国产高清在线精品 | www.天天操.com | 国产精品久久久久久婷婷天堂 | 亚洲成人精品免费 | 欧美一级片在线看 | 91精品久久久久久久久 | 国产精品成人在线播放 | 午夜影院在线观看免费 | 亚洲精品免费观看 | 黑人巨大精品欧美一区二区免费 | 日韩视频在线一区二区 | 久久狠狠 | 国产中文 |