欧美在线专区-欧美在线伊人-欧美在线一区二区三区欧美-欧美在线一区二区三区-pornodoxxx中国妞-pornodoldoo欧美另类

position>home>Archive

實用貼:用宏實現函數功能映射

[導讀]此實例代碼旨在提供一種處理類似事務時的實用數功射一種函數映射關系。


1
實現思路

? ??

實用貼:用宏實現函數功能映射

此實例代碼旨在提供一種處理類似事務時的貼用一種函數映射關系。


函數功能不同,宏實但函數結構一樣,現函通過數組和結構體進行函數功能的實用數功射映射,在函數體內處理數據,貼用實現對變量的宏實賦值,通過函數指針調用函數,現函因為結構類似可以用for循環遍歷所有映射函數。實用數功射


當修改功能時,貼用只需要修改函數,宏實映射結構不用改變,現函為代碼的實用數功射維護提供了很大的方便。


2
實例代碼

? ??

1)實現代碼


下面代碼模擬下AD通道采樣,貼用轉換的宏實映射調用方式,只是模擬,沒有實際的應用價值,大家根據需要進行修改就可以移植到自己的工程中去了。


????下面代碼重要的是結構和思路,很有必要學習下哈,。


#include?
#include?

#define??uint32_t??unsigned?int?


/*?此宏的順序要與結構RawToVal_Map_t中變量順序一一對應,不然會報錯?*/??
#define?VAL_SWAP(Ch,?Convert)??{ ?&(Ch.wRawInValue),?Convert,?&(Ch.dwInValue)?}

//?函數聲明
void?AD_CH1(uint32_t?*pRawValue,?uint32_t?*pValue);
void?AD_CH2(uint32_t?*pRawValue,?uint32_t?*pValue);
void?AD_CH3(uint32_t?*pRawValue,?uint32_t?*pValue);
void?AD_CH4(uint32_t?*pRawValue,?uint32_t?*pValue);


typedef?struct?_AD_Ch_t?
{
??????uint32_t?dwInValue;??????//?轉換值
??????uint32_t?wRawInValue;????//?原始值?
???????
}?AD_Ch_t;

//?定義不同通道數據的結構變量
AD_Ch_t?in_AD_1,in_AD_2,in_AD_3,in_AD_4;

//?定義函數指針
typedef?void?(*RawToVal_t)(uint32_t?*pRawValue,?uint32_t?*pValue);???

//?數組數據對應的映射結構?
typedef?struct?_RawToVal_Map_t?
{
?
??????uint32_t????*pRawValue;
??????RawToVal_t???RawToVal;
??????uint32_t????*pValue;
?
}?RawToVal_Map_t;

/*?數據映射數組?*/?
RawToVal_Map_t?MapArray[2][2]?=?
{ ??????//?下面映射一一對應,可以根據需要進行交叉映射?
???????
???????{
????????????VAL_SWAP(in_AD_1,AD_CH1),??//?通道1映射到通道1的功能?
????????????VAL_SWAP(in_AD_2,AD_CH2)???//?通道2映射到通道2的功能?
???????},
????
???????{
????????????VAL_SWAP(in_AD_3,AD_CH3),??//?通道3映射到通道3的功能?
????????????VAL_SWAP(in_AD_4,AD_CH4)???//?通道4映射到通道4的功能?
???????}
};

int?main(int?argc,?char?*argv[])?
{
?
??????uint32_t?i,?j,?ch?=?1,bCh;
?
??????RawToVal_Map_t?*pMap;
?
??????for(j?=?0;?j???????{
????????????for(i?=?0;?i?????????????{
??????
??????????????????pMap?=?&(MapArray[j][i]);?//?指向映射數組中的數據??????????????????????????
??????????????????(*(pMap->RawToVal))(pMap->pRawValue,pMap->pValue);???????//?函數調用?
??
??????????????????printf("\nCh%d?RawVal?is?%d.",ch,*(pMap->pRawValue));????//?打印原始值??
??????????????????printf("\nCh%d?SwapVal?is?%d.?\n",ch,*(pMap->pValue));???//?打印轉換值?
???
??????????????????//?專門給通道一個變量,用于上面的打印?
??????????????????if(ch?<=?4)
??????????????????{
???????????????????????ch++;
??????????????????}
??????????????????else
??????????????????{
???????????????????????ch?=?1;
??????????????????}
??
????????????}
??????}

??????return?0;
}

/*?下面四個函數特別簡單,只做系數乘法和賦值,實際中可以變為實際的工程運算*/?
void?AD_CH1(uint32_t?*pRawValue,?uint32_t?*pValue)
{
?
??????*pRawValue?=?1;
??????*pValue?=?*pRawValue?*?2;
?????
??????in_AD_1.wRawInValue?=?*pRawValue;
??????in_AD_1.dwInValue?=?*pValue;

}


void?AD_CH2(uint32_t?*pRawValue,?uint32_t?*pValue)
{
??????*pRawValue?=?1;
??????*pValue?=?*pRawValue?*?4;
?
??????in_AD_2.wRawInValue?=?*pRawValue;
??????in_AD_2.dwInValue?=?*pValue;
?
}


void?AD_CH3(uint32_t?*pRawValue,?uint32_t?*pValue)
{
??????*pRawValue?=?1;
??????*pValue?=?*pRawValue?*?8;
?
??????in_AD_3.wRawInValue?=?*pRawValue;
??????in_AD_3.dwInValue?=?*pValue;

}


void?AD_CH4(uint32_t?*pRawValue,?uint32_t?*pValue)
{
??????*pRawValue?=?1;
??????*pValue?=?*pRawValue?*?16;
?
??????in_AD_4.wRawInValue?=?*pRawValue;
??????in_AD_4.dwInValue?=?*pValue;
?
}


2)運行結果



總結

? ? 今天給大家介紹了一種用宏封裝結構體變量和函數入口,實現函數功能映射,遍歷調用的方式,感興趣的小伙伴,趕緊把代碼擼下來去試試吧。


? ?有問題可以后臺留言,公眾號18年后新申請的,文章后不支持留言功能的。


最后

以上就是本次的分享,如果覺得文章不錯,轉發、在看,也是我們繼續更新的動力。

猜你喜歡:

2020年精選原創筆記匯總

干貨 | protobuf-c之嵌入式平臺使用

1024G 嵌入式資源大放送!包括但不限于C/C++、單片機、Linux等。在公眾號聊天界面回復1024,即可免費獲取!

免責聲明:本文內容由21ic獲得授權后發布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!

Popular articles

主站蜘蛛池模板: 免费女人18毛片a级毛片视频| 波多野结衣教师诱惑| 精品国偷自产在线| 久久精品青草社区| 狠狠天天| 人人爽天天碰天天躁夜夜躁| 妖精视频免费网站| 夜来香电影完整版免费观看 | 伊人久久精品久久亚洲一区| 亚洲人成伊人成综合网久久久| 正在播放暮町ゆう子在线观看| 好吊妞视频在线观看| 欧美三级黄色大片| 最近中文字幕大全免费版在线| 天天看免费高清影视| 男女无遮挡猛进猛出免费观看视频| 四虎影视永久在线观看| 中文字幕一二三四区2021| 性欧美大战久久久久久久| 亚洲春色第一页| 处女影院| 欧美激情一级二级三级在线视频| 国色天香社区高清在线观看| 波多野结衣手机在线视频| 亚洲精品自产拍在线观看动漫| 成年在线观看免费人视频草莓| 百合h肉动漫无打码在线观看| 在线观看国产一区二区三区| 99久久精品费精品国产一区二区 | 午夜精品久久久久久| 在线免费中文字幕| 一区二区三区中文字幕| 啊轻点灬大ji巴太粗太长了h| 小小影视日本动漫观看免费| 国产gay小鲜肉| 午夜羞羞影院| 伊人成影院九九| 亚洲国产成人久久综合一区| 把英语课代表按在地上c网站| 日本理论在线| 天天干天天干天天干|