嵌入式中的合作開發(fā)--函數(shù)指針
嵌入式中的合作開發(fā)--函數(shù)指針
\\\插播一條:文章末尾有驚喜喲~///
在嵌入式軟件開發(fā)中,一個項目往往須要多人協(xié)作完成。
假如A須要完成項目標(biāo)整體邏輯功能,而整個邏輯功能包含許多詳細(xì)的小功能,但A又沒有時長或才能來實現(xiàn)這些小功能,這時能夠讓B來協(xié)助實現(xiàn)函數(shù)內(nèi)部的功能。
通常的思維是,B寫好某個函數(shù)后,A直接通過B聲明的函數(shù)調(diào)用即可。但這會有一些問題,例如B寫好函數(shù)之后,A只能使用B聲明的函數(shù)名來使用,假設(shè)B聲明的函數(shù)名的命名規(guī)則很不合乎A的口味,A用起來就很不爽,哈哈。那這樣怎么辦呢?聰慧的A能夠自己再聲明一個自己喜愛的函數(shù)名,并通過函數(shù)指針傳遞的功能來獲得B的功能。
下面來講一下詳細(xì)實現(xiàn):
聲明函數(shù)指針-A負(fù)責(zé)
假如A須要一個求和功能的函數(shù),但他沒時長寫,他能夠自己先聲明一個函數(shù)指針:
//a中聲明一個指針函數(shù),其函數(shù)內(nèi)部的功能須要另一個人b來完成 int (*mysum)(int, int)=0;
這個看起來和普通的函數(shù)聲明很像,都有函數(shù)名,返回值類型與參數(shù)類型,但該函數(shù)名前有一個星號,表示它是函數(shù)指針,另外其函數(shù)實體能夠先初始化為0。
函數(shù)指針賦值-A負(fù)責(zé)
這一步相當(dāng)于函數(shù)指針初始化,也相當(dāng)于函數(shù)注冊,就是將A聲明的函數(shù)指針,通過指針賦值的方式,來獲得B實現(xiàn)的函數(shù)功能,相當(dāng)于是給B寫的函數(shù)套上一層A的殼:
//初始化指針函數(shù),傳入b寫的函數(shù)的函數(shù)名,//通過函數(shù)指針賦值,main中聲明的函數(shù),就能夠使用b寫的函數(shù)功能了 int init_mysum_func(int(*func_handle)(int,int)){
mysum = func_handle;
return 0;}
函數(shù)的詳細(xì)實現(xiàn)-B負(fù)責(zé)
B這個人只有依照A聲明的函數(shù)指針的格式(返回值與參數(shù)類型一致,函數(shù)名能夠隨意)完成函數(shù)內(nèi)部功能即可,這里以簡略的求和為例,在b.h文件中,B實現(xiàn)的功能如下:
int sum_by_b(int a, int b){
return a+b;}
項目整理邏輯-A負(fù)責(zé)
項目邏輯很簡略,就是求1+2的值,這時A在使用自己聲明的mysum之前,初始化(注冊)一下該函數(shù)(將B寫的函數(shù)“sum_by_b”套上A寫的殼“mysum”),然后就能夠使用了,使用實例如下:
int main(){
int res = 0;
init_mysum_func(sum_by_b);//初始化指針函數(shù),將b完成的函數(shù)功能賦予a聲明的函數(shù)
res = mysum(1,2);//使用a聲明的求和函數(shù)進(jìn)行求和,其內(nèi)部實現(xiàn)其實的b完成的
printf("mysum(1,2) = %d",res);
return 0;}
測試結(jié)果:
mysum(1,2) = 3
--------------------------------
Process exited after 0.007424 seconds with return value 0
請按任意鍵繼續(xù). . .
附:整個測試代碼
b.h
int sum_by_b(int a, int b)
{
return a+b;
}
a.c
#include #include #include "b.h"//a中聲明一個指針函數(shù),其函數(shù)內(nèi)部的功能須要另一個人b來完成 int (*mysum)(int, int)=0;
//初始化指針函數(shù),傳入b寫的函數(shù)的函數(shù)名,//通過函數(shù)指針賦值,main中聲明的函數(shù),就能夠使用b寫的函數(shù)功能了 int init_mysum_func(int(*func_handle)(int,int)){
mysum = func_handle;
return 0;}
int main(){
int res = 0;
init_mysum_func(sum_by_b);//初始化指針函數(shù),將b完成的函數(shù)功能賦予a聲明的函數(shù)
res = mysum(1,2);//使用a聲明的求和函數(shù)進(jìn)行求和,其內(nèi)部實現(xiàn)其實的b完成的
printf("mysum(1,2) = %d",res);
return 0;}
三種必需掌握的嵌入式開發(fā)程序架構(gòu)!
在嵌入式軟件開發(fā),包括單片機(jī)開發(fā)中,軟件架構(gòu)對于開發(fā)人員是一個必需仔細(xì)考慮的問題。軟件架構(gòu)對于系統(tǒng)整體的穩(wěn)定性和可靠性是非常重要的,一個適宜的軟件架構(gòu)不僅構(gòu)造清晰,并且便于開發(fā)?
信盈達(dá)嵌入式
嵌入式C語言的高級使用(全網(wǎng)最詳細(xì))
PlayCodes
嵌入式開發(fā)中的一些代碼規(guī)范和格調(diào)
奔騰的心發(fā)表于嵌入式那些...
stm32項目模板示例
奔騰的心
第2節(jié):我眼中進(jìn)修單片機(jī)的四個階段
教你單片機(jī)入門根底第2講:
第一階段:學(xué)會C語言的常用語法,熟悉51單片機(jī)開發(fā)平臺軟件keil的操作,了解單片機(jī)的大略原理特性,能讀懂按鍵,數(shù)碼管,跑馬燈,串口的簡略程序,能熟悉幾個常用的外圍芯片驅(qū)動。網(wǎng)上這方面優(yōu)秀的教程很多,我正在寫的這個連載《從業(yè)十年,教你單片機(jī)入門根底》也是屬于這類入門教程之一。
第二階段:我認(rèn)為這個階段是四個階段中最重要的階段。很多初學(xué)者完成了第一階段的進(jìn)修,真正去面對一個小項目標(biāo)時候,還是沒從下手。他們不知道按鍵,顯示,通訊,應(yīng)用程序之間是如何關(guān)聯(lián)起來的,他們一旦遇到多任務(wù)項目標(biāo)時候不知道如何并行處理,他們最缺少的是程序的框架思維。網(wǎng)上有很多熱心牛人分享的程序框架思想,都值得大家進(jìn)修和借鑒。我平時做項目是用狀態(tài)機(jī)的思維,就是用switch語句實現(xiàn)多任務(wù)的切換,再外加一個定時中斷產(chǎn)生不同的時長計時,有興趣的朋友能夠看看我去年在本論壇寫的連載貼子《從業(yè)將近十年,手把手教你單片機(jī)程序框架》。
第三階段:大家在做項目時,除了寫單片機(jī)的軟件,還不可避免的要跟整個電路的硬件打交道,掌握一些常用的硬件電路知識就顯得尤其重要。電阻,電容,電感,二極管,三極管,光藕的應(yīng)用,電壓差和參照地的關(guān)系,兩系統(tǒng)通信時需不須要共地的理由,隔離與非隔離的本質(zhì),常見的變壓整流電路,常見的外圍驅(qū)動電路等等。這方面優(yōu)秀的電子根底教程很多,大家應(yīng)該主動找這方面的資料來進(jìn)修進(jìn)修,我過一兩年后也打算寫寫這方面的連載貼子《從業(yè)十年,單片機(jī)常用硬件知識講解》。
第四階段:有了前面三個階段的主動進(jìn)修和積攢,就能夠去做項目了,在項目中進(jìn)修。依據(jù)工作的須要來選擇進(jìn)修哪個廠家的單片機(jī),假如PIC,AVR,stm32等單片機(jī)廠家;依據(jù)工作的須要來決定是否須要進(jìn)修匯編語言,有一些臺灣廠家的單片機(jī)并不能用C語言開發(fā),只能用匯編;依據(jù)工作的須要來深層鉆研相關(guān)行業(yè)所需的硬件電路知識;依據(jù)工作的須要來進(jìn)修相關(guān)的外圍芯片驅(qū)動程序。
延展:
PCB電路設(shè)計之PADS_LOGIC原理圖設(shè)計
STM32中用到了一些重要的C語言知識點,匯總!
前言一位初學(xué)單片機(jī)的小搭檔讓我舉薦C語言書籍,由于C語言根底比較差,想把C語言重新學(xué)一遍,再去學(xué)單片機(jī),我以前剛學(xué)單片機(jī)的時候也有這樣子的想法。其實C語言是可?
嵌入式大雜燴
半個月進(jìn)修單片機(jī)的知識總結(jié)
一、前期的最根底的準(zhǔn)備1.一塊單片機(jī)開發(fā)板(價格在60元左右) 2.一臺電腦 3.相應(yīng)的軟件 4.具有一定的C語言根底。在目前的進(jìn)修中還未遇到C語言指針的應(yīng)用,所以這一點對C語言的要求其實不?
HouEn
十天學(xué)會單片機(jī)可能嗎?單片機(jī)入門須要多久?
幾年前,我是通過郭教師的十天學(xué)會單片機(jī)教程和配套開發(fā)板入門單片機(jī)的。最近被學(xué)員問到比較多的問題就是,單片機(jī)的進(jìn)修周期大略要多久。今天在這里統(tǒng)一答復(fù)下。這個主要是要看學(xué)到什么?
沒際單片機(jī)
單片機(jī)編程入門根底知識(新手必看)
單片機(jī)不是一門技術(shù),而是一個工具。對于工具,我們的目標(biāo)是會熟練地使用它。假如你看懂這句話,會少走很多彎路。下面我來講一下使用這個工具時,會波及到的一些知識點。
彩蛋:最近有同學(xué)跟我要單片機(jī)的資料,我特意花幾個月時間,總結(jié)了我10年產(chǎn)品研發(fā)經(jīng)驗,資料包幾乎覆蓋了C語言、單片機(jī)、模電數(shù)電、原理圖和PCB設(shè)計、單片機(jī)高級編程等等,非常適合初學(xué)者入門和進(jìn)階。除此以外,再含淚分享我壓箱底的22個熱門開源項目,包含源碼+原理圖+PCB+說明文檔,不是市面上打包賣的那種課程,我認(rèn)為教程多未必是好事,10年前我自學(xué)快,除了自身執(zhí)行力以外,還有就是教程少。不要害羞做伸手黨,等你一個小紅點。后期我也會組建一些純技術(shù)交流的小圈子,讓大家能認(rèn)識更多的大佬,有個好的圈子,你對行業(yè)的認(rèn)知一定是最前沿的。