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

一線研發之聲: 嵌入式C編程經驗 之 函數指針的妙用

發布時間:2012-2-21 15:05    發布者:絕對好文
關鍵詞: C編程 , c語言 , SedateFire , 指針
/*****************************************************
* Filename: 一線研發之聲:嵌入式C編程經驗 之 函數指針
* Author:SedateFire
* E-mail:SedateFire@126.com
* Version:1.0      
* Modify Date: 2012-01-12
* key: 嵌入式 函數指針 回調函數
* 本文首發: 環球資源-電子工程專輯-博客: 靜心齋
******************************************************/

今天討論什么呢,就討論函數指針吧

指針,在C語言中,是一個神圣的存在,可遠觀不可褻玩焉。函數指針,則是指針里面更讓人敬畏的存在。

如果你是一個單片機工作者,那么我猜測你八成忘記了函數指針如何定義,我幾乎可以想象出你苦苦思索的神態了。

如果你是一個linux底層驅動工作者,那么顯然你要感嘆造物住的神奇,函數指針竟是如此的遍地開花。尤其是linux 2.6以后的內核版本,你幾乎要被指針晃花眼睛了,沒有2年工作經驗你都很難找到函數的原型定義在哪里。linux內核是一個高度抽象的世界,它把所有外設都視為文件,這一切,函數指針功不可沒。

前者太遙遠,因為單片機基本上無法應用函數指針。比如Keil C51,函數指針是非常危險的,因為編譯器不知道你這個指針要指向那個函數,也就無法分析分配每個局部變量。額...那個靜態編譯懂嗎?用一句形象的話為君解惑,對于靜態編譯,每個變量(含局部)它的地址都是恒定不變的,但不是唯一的哦。C51的棧,只用來存儲函數返回地址。當然,特殊的遞歸編譯不在討論范圍之內。所以,單片機程序和函數指針基本絕緣。只有一個途徑可以用函數指針,那就是在編譯階段就告訴編譯器這個函數指針的對象,且那個函數必須是有定義的,存在的。

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

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

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

當然多數人沒那么好運的,我們說點實際點的,M0/M3平臺。這個平臺是很適用函數指針的,因為它是壓棧式的編譯方式。它最廣泛的應用是回調函數,就我個人體會來講,回調函數主要是為了分層清晰和模塊化而存在的。我底層想傳遞消息給頂層,但又不好直接調用頂層函數,于是就用函數指針這種暗度陳倉的方式。有人說,直接調用不就得了,搞什么虛文。問題是頂層隨時可能換,函數名也會變,到時候移植起來發現,頂層和底層盤根錯節,相互依賴,那是很痛苦的。頂層對底層說,小兄弟,這個事情你先做,有什么情況你就打電話給我,剩下的我來處理。底層含著眼淚對頂層說,哥,你別說了,你還是先把電話號碼給我吧,您干嘛老換號碼啊。這個記錄電話的媒介,就是回調函數指針。

回調之妙,食髓知味。

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

哎,自己回頭看了一遍,內容冗余,表達轉折突兀,不夠圓潤,容我再細細梳理一翻...
本文地址:http://m.qingdxww.cn/thread-86291-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美一区二区三区二厂| 一二三四在线播放免费观看中文版视频| 国产超碰人人爱被IOS解锁| 精品久久综合1区2区3区激情| 亚洲精品久久无码AV片银杏| 人人爱人人搞| 日本精品一区二区| 在线午夜视频| 亚洲午夜性春猛交xxxx| 扒开老师大腿猛进AAA片邪恶 | 亚洲精品国产专区91在线| 欧美亚洲啪啪| 中文字幕专区在线亚洲| 一二三四视频免费观看1 | 午夜传媒| 亚洲综合区| 久久www免费人成_看片高清| 最近2019年日本中文免费字幕| 亚洲综合国产一区在线| 婷婷狠狠五月天小说免费| 亚洲欧美日韩另类精品一区二区三区| 国产成人片视频一区二区青青| 学生小泬无遮挡女HD| 欧美日韩在线观看一区二区| 日日奸| 校花小雪灌满了男人们的浓浆| 囯产精品一品二区三区| 亚洲AV久久久噜噜噜噜| 一级毛片在线不卡直接观看| 亚洲无线乱码高清在线观看一区| 在线毛片一区二区不卡视频| 男人插女人逼逼| 午夜精品久久久久久毛片| 手机亚洲第一页| 亚洲午夜综合网| 久久国产加勒比精品无码| 青青操在线视频| 日韩一区二区三区不卡| 亚洲精品第二页| 国精一区二区AV在线观看网站| 性盈盈剧场|