999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用函數指針替代Switch/Case語句的程序設計方法

2014-07-03 03:33:12龔松顯董銳劉躍宣
單片機與嵌入式系統應用 2014年9期
關鍵詞:單片機程序功能

龔松顯,董銳,劉躍宣

(總參通信訓練基地 教研部,宣化075100)

引 言

在單片機程序中,諸如鍵盤按鍵掃描、菜單處理等多種邏輯功能,在代碼上常采用Switch/Case語句的實現方式。Switch/Case語句是一種簡單、初級的邏輯表達式,當代碼較為復雜時,不利于程序的功能調試和邏輯修改[1],程序的可擴充性和可移植性都受到影響。為了在單片機常用的結構化程序設計中避免Switch/Case語句過于冗長,提出一種使用函數指針來替代Switch/Case語句的實現思路,并給出兩種情況下的代碼模型。事實證明,該方法可使程序的結構清晰、易于維護,可提高單片機程序的可讀性和設計效率。

1 Switch/Case語句的代碼模型及特點

1.1 Switch/Case語句代碼模型

Switch/Case是C語言中的基本語句,其使用方法在大量教材及書籍中均有介紹[2],這里不再贅述。一般來說,Switch/Case語句代碼模型如下:

在該代碼模型中,假定function函數形參及返回值均為void類型,其使用Switch/Case分支語句進行不同情況下的程序處理。Prm Value是從前面的程序處理代碼中獲得的表達式,Prm_A、Prm_B和Prm_C等常量是表達式的值。當表達式的值與某一個Case后面的常量表達式的值匹配時,就執行此Case后面的語句。

1.2 Switch/Case語句的不足

從模型上可以看出,對于簡單的功能實現,Switch/Case語句清晰、簡便;但當項目功能較為復雜,例如鍵盤數或菜單級數較多時[3],Switch/Case語句的判斷分支較多,導致代碼冗長,常常一個Case分支語句動輒跨越數十行,程序整體的可讀性和可移植性降低,程序的結構不夠清晰。另外,當Switch/Case語句需要擴展功能時,需要在已經臃腫的Case分支上繼續“添磚加瓦”,造成了程序語句的進一步冗長,不便于后期程序邏輯功能的修改。

2 使用函數指針替代Switch/Case語句的兩種設計方法

2.1 Case表達式的值連續情況下的設計方法

在Switch/Case語句代碼模型中,較為常見的一種情況是:Prm_A、Prm_B、Prm_C等常量是連續的數值。對于這種情況,設計思路是定義相關的函數指針數組[4],然后實現相對應的函數。在使用時,只需調用對應的函數指針數組元素即可。該方式下代碼模型如下:

在該代碼模型中,假定函數指針指向的函數形參及返回值均為void類型,Prm Value是從前面的程序處理代碼中獲得的表達式。設計方法中,將每個Case分支的處理代碼封裝成函數,并將每個函數地址按照Case表達式的值的順序賦給函數指針數組各元素。在功能代碼中,程序的實現主體只需使用Prm Value的值調用對應的處理函數即可,原本冗長的Switch/Case語句被一條簡單的函數指針調用代替,形式較為簡潔。使用這種設計方法,當程序需要擴展新的功能邏輯的時候,只需要依次增加函數指針數組元素的值并實現對應的函數,功能代碼的主體部分不需改動。需要注意的一點是,第2種的代碼模型中,假定Prm Value的值是從0開始的,對于Case表達式的值不是從0開始但Case表達式的值連續的情況,上面的代碼模型仍然可以使用。例如,如果Case表達式的值是從delta開始的,在這種情況下只需要將第2種代碼模型中的(p Fun[Prm Value])()表達式改為(p Fun[Prm Valuedelta])()即可,代碼的其他部分均可以保持不變。

2.2 Case表達式的值離散情況下的設計方法

第1種代碼模型中,在Prm_A、Prm_B、Prm_C等數值相差較大且不連續的情況下,如果仍然套用2.1節的設計方法,函數指針數組中需要人為填充大量冗余數據,造成資源的浪費,并且在修改時需要做到精確的一一對應,程序的設計反而變得更為麻煩,失去了設計方法的本意。此時需要對第2種代碼模型進行增強設計。其設計思路是通過構建一個數據結構,將離散的Case表達式的值和對應的處理函數一一對應,在功能代碼中對函數指針進行輪詢操作。其實現模型如下:

在該代碼模型中,構建的StructFun結構體數組實現了Case表達式的值和函數指針的一一對應。當程序需要擴展新的功能邏輯時,只需要添加StructFun結構體數組的內容并實現對應函數體即可,設計方法的優點與2.1節的設計方法類似。實際上,2.1節的設計方法是特殊情況下本設計方法的退化,兩種設計方法在思路上仍是保持一致的。

結 語

本文介紹的兩種使用函數指針替代Switch/Case語句的方法,使程序的任務處理邏輯關系變得簡潔明了,易于增加程序狀態,更改程序邏輯,程序的可讀性、可調試性強,減少了單片機程序設計中的錯誤。筆者在工程項目中驗證了這兩種設計方法,實際可行且快捷有效,對于單片機常用的結構化程序開發具有一定的借鑒意義。

[1]張臘明,佟宇.狀態機技術在數據通訊協議棧中的編程應用[J].現代電子技術,2008(3):146-147.

[2]譚浩強.C程序設計[M].3版.北京:清華大學出版社,2008.

[3]汪高勇,宋毅恒,尚舉邦.C51與單片機系統多級菜單的模塊化設計[J].光電技術應用,2009,24(2):62-66.

[4]朱博,許倫輝.Keil C51中函數指針的使用[J].單片機與嵌入式系統應用,2008(5):71-72.

猜你喜歡
單片機程序功能
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
“程序猿”的生活什么樣
關于非首都功能疏解的幾點思考
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
Microchip推出兩個全新PIC單片機系列
主站蜘蛛池模板: 久久精品亚洲中文字幕乱码| 99视频精品在线观看| 国产午夜精品鲁丝片| 亚卅精品无码久久毛片乌克兰| 国产一区二区三区免费| 多人乱p欧美在线观看| 四虎影院国产| 强乱中文字幕在线播放不卡| 一本一道波多野结衣一区二区| 国内精品伊人久久久久7777人| 色婷婷成人网| 免费国产一级 片内射老| 久久伊人色| 毛片大全免费观看| 狠狠色噜噜狠狠狠狠奇米777| 亚洲高清无在码在线无弹窗| 热久久这里是精品6免费观看| 欧美日韩亚洲综合在线观看| 亚洲欧美不卡中文字幕| 国产精品伦视频观看免费| 日韩亚洲高清一区二区| 精品亚洲国产成人AV| 人妻精品全国免费视频| 久久国产亚洲欧美日韩精品| 国产在线观看第二页| av在线手机播放| 国产精品亚洲综合久久小说| 久久亚洲日本不卡一区二区| 亚洲精品无码高潮喷水A| 精品久久综合1区2区3区激情| 日韩精品中文字幕一区三区| 亚洲国产综合精品一区| av一区二区无码在线| 久久久久88色偷偷| 青青操国产| 亚洲人成日本在线观看| 国产一级精品毛片基地| 日韩第九页| 美美女高清毛片视频免费观看| 中文字幕丝袜一区二区| 国产农村1级毛片| 亚洲成aⅴ人在线观看| 欧美精品影院| 国产欧美另类| 谁有在线观看日韩亚洲最新视频| 蜜桃视频一区| 日韩精品一区二区三区免费| 毛片手机在线看| 欧美午夜视频| 国产内射在线观看| 91久久精品国产| 亚洲天堂区| 欧美日韩国产在线观看一区二区三区 | 亚洲国产中文综合专区在| 亚洲精品日产AⅤ| 久久视精品| 无码中字出轨中文人妻中文中| 高清码无在线看| 中文字幕 欧美日韩| 色悠久久久| 一级福利视频| 国产亚洲高清在线精品99| 精品偷拍一区二区| 黄色国产在线| 97青青青国产在线播放| 国产精品久线在线观看| 成人国产三级在线播放| 免费在线成人网| 欧美久久网| 素人激情视频福利| 亚洲丝袜第一页| 久久精品aⅴ无码中文字幕 | 国产精品自拍露脸视频| 日韩高清无码免费| 国产精鲁鲁网在线视频| 国产资源站| 多人乱p欧美在线观看| 久久国产精品影院| 国产18在线播放| 91无码视频在线观看| 日韩午夜片| 无码啪啪精品天堂浪潮av|