国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

一線研發(fā)之聲: 嵌入式C編程經(jīng)驗(yàn) 之 函數(shù)指針的妙用

發(fā)布時(shí)間:2012-2-21 15:05    發(fā)布者:絕對(duì)好文
關(guān)鍵詞: C編程 , c語(yǔ)言 , SedateFire , 指針
/*****************************************************
* Filename: 一線研發(fā)之聲:嵌入式C編程經(jīng)驗(yàn) 之 函數(shù)指針
* Author:SedateFire
* E-mail:SedateFire@126.com
* Version:1.0      
* Modify Date: 2012-01-12
* key: 嵌入式 函數(shù)指針 回調(diào)函數(shù)
* 本文首發(fā): 環(huán)球資源-電子工程專輯-博客: 靜心齋
******************************************************/

今天討論什么呢,就討論函數(shù)指針吧

指針,在C語(yǔ)言中,是一個(gè)神圣的存在,可遠(yuǎn)觀不可褻玩焉。函數(shù)指針,則是指針里面更讓人敬畏的存在。

如果你是一個(gè)單片機(jī)工作者,那么我猜測(cè)你八成忘記了函數(shù)指針如何定義,我?guī)缀蹩梢韵胂蟪瞿憧嗫嗨妓鞯纳駪B(tài)了。

如果你是一個(gè)linux底層驅(qū)動(dòng)工作者,那么顯然你要感嘆造物住的神奇,函數(shù)指針竟是如此的遍地開花。尤其是linux 2.6以后的內(nèi)核版本,你幾乎要被指針晃花眼睛了,沒有2年工作經(jīng)驗(yàn)?zāi)愣己茈y找到函數(shù)的原型定義在哪里。linux內(nèi)核是一個(gè)高度抽象的世界,它把所有外設(shè)都視為文件,這一切,函數(shù)指針功不可沒。

前者太遙遠(yuǎn),因?yàn)閱纹瑱C(jī)基本上無(wú)法應(yīng)用函數(shù)指針。比如Keil C51,函數(shù)指針是非常危險(xiǎn)的,因?yàn)榫幾g器不知道你這個(gè)指針要指向那個(gè)函數(shù),也就無(wú)法分析分配每個(gè)局部變量。額...那個(gè)靜態(tài)編譯懂嗎?用一句形象的話為君解惑,對(duì)于靜態(tài)編譯,每個(gè)變量(含局部)它的地址都是恒定不變的,但不是唯一的哦。C51的棧,只用來(lái)存儲(chǔ)函數(shù)返回地址。當(dāng)然,特殊的遞歸編譯不在討論范圍之內(nèi)。所以,單片機(jī)程序和函數(shù)指針基本絕緣。只有一個(gè)途徑可以用函數(shù)指針,那就是在編譯階段就告訴編譯器這個(gè)函數(shù)指針的對(duì)象,且那個(gè)函數(shù)必須是有定義的,存在的。

static const void (*function_pointer)(void) = function_exist;

如果你的單片機(jī)程序中,有一個(gè)很大的很有規(guī)律的類似switch的寫法,那么可以改寫成靜態(tài)函數(shù)指針數(shù)組,用查表方式,無(wú)論是可閱讀性,還是程序效率,都頗有可道之處。如果不告訴編譯器函數(shù)指針的對(duì)象,那你就完蛋了,程序也許能跑,但bug是莫名其妙的,沒有任何邏輯的。如果你說(shuō)那樣干沒有問題,那我也不爭(zhēng)辯,只盼你能買幾張彩票送我。

linux當(dāng)中的函數(shù)指針,那是鑼鼓喧天鞭炮齊鳴紅旗招展人山人海啊~~。基本上只要是結(jié)構(gòu)體,里面都必有一個(gè)函數(shù)指針,而且是一層嵌套一層地層層抽象上去,還有一堆令人頭皮發(fā)麻的void *無(wú)類型指針,指針和變量齊飛,代碼共數(shù)據(jù)一色。所以,高薪不是沒有依據(jù)的。隨著android的迅猛發(fā)展,大家接觸linux內(nèi)核的機(jī)會(huì)也會(huì)越來(lái)越多。

當(dāng)然多數(shù)人沒那么好運(yùn)的,我們說(shuō)點(diǎn)實(shí)際點(diǎn)的,M0/M3平臺(tái)。這個(gè)平臺(tái)是很適用函數(shù)指針的,因?yàn)樗菈簵J降木幾g方式。它最廣泛的應(yīng)用是回調(diào)函數(shù),就我個(gè)人體會(huì)來(lái)講,回調(diào)函數(shù)主要是為了分層清晰和模塊化而存在的。我底層想傳遞消息給頂層,但又不好直接調(diào)用頂層函數(shù),于是就用函數(shù)指針這種暗度陳倉(cāng)的方式。有人說(shuō),直接調(diào)用不就得了,搞什么虛文。問題是頂層隨時(shí)可能換,函數(shù)名也會(huì)變,到時(shí)候移植起來(lái)發(fā)現(xiàn),頂層和底層盤根錯(cuò)節(jié),相互依賴,那是很痛苦的。頂層對(duì)底層說(shuō),小兄弟,這個(gè)事情你先做,有什么情況你就打電話給我,剩下的我來(lái)處理。底層含著眼淚對(duì)頂層說(shuō),哥,你別說(shuō)了,你還是先把電話號(hào)碼給我吧,您干嘛老換號(hào)碼啊。這個(gè)記錄電話的媒介,就是回調(diào)函數(shù)指針。

回調(diào)之妙,食髓知味。

夜了,閃人先,期待本文1.1版吧,呵呵

哎,自己回頭看了一遍,內(nèi)容冗余,表達(dá)轉(zhuǎn)折突兀,不夠圓潤(rùn),容我再細(xì)細(xì)梳理一翻...
本文地址:http://www.qingdxww.cn/thread-86291-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
機(jī)械電子 發(fā)表于 2015-8-13 13:09:21
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 無(wú)線充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程2
  • PIC18-Q71系列MCU概述
  • 5分鐘詳解定時(shí)器/計(jì)數(shù)器E和波形擴(kuò)展!
  • 想要避免發(fā)生災(zāi)難,就用MPLAB® SiC電源仿真器!
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久 精品 一区二区 | 久久国产影视免费精品 | 成人在线免费视频播放 | 日本不卡高清免费v日本 | 中国一级特黄剌激爽毛片 | 91高清国产 | 九九综合 | 免费在线观看国产 | 一级特级毛片 | 在线成人中文字幕 | 日本在线网站 | 免费观看黄色网页 | 国产精品手机在线 | 第一福利在线观看 | 免费黄片毛片 | 久久久久成人精品免费播放动漫 | 亚洲综合色婷婷久久 | 伊人丁香狠狠色综合久久 | 伊人色综合网一区二区三区 | 99精选视频 | 韩国福利高清 免费 | 久草色在线| 成人a一级毛片免费看 | 国产精品视频一区二区三区经 | 羞羞免费网站 | 四虎影库紧急大通知 | 国产swag在线 | 四虎精品成人免费观看 | 青青草乐园| 精品久久中文久久久 | 欧美成人全部免费观看1314色 | 欧美亚洲影院 | 亚州免费一级毛片 | 欧美日韩亚 | 国产精品91视频 | sese天堂| 亚洲精品蜜桃久久久久久 | 第一色网站 | 妻子的诱惑在线免费观看正片 | 国产成人综合亚洲亚洲欧美 | 免费观看污网站 |