1實(shí)現(xiàn)思想該示例代碼旨在在處理類(lèi)似事務(wù)時(shí)提供功能映射關(guān)系。
功能功能不同,但功能結(jié)構(gòu)相同。
通過(guò)數(shù)組和結(jié)構(gòu)映射函數(shù)功能,在函數(shù)體內(nèi)處理數(shù)據(jù),實(shí)現(xiàn)變量分配,并通過(guò)函數(shù)指針調(diào)用函數(shù)。
因?yàn)榻Y(jié)構(gòu)相似,所以for循環(huán)可用于遍歷所有映射函數(shù)。
修改功能時(shí),只需修改功能,無(wú)需更改映射結(jié)構(gòu),為代碼的維護(hù)提供了極大的方便。
2示例代碼1)實(shí)現(xiàn)代碼以下代碼模擬了AD通道采樣和轉(zhuǎn)換映射調(diào)用方法。
它只是模擬,沒(méi)有實(shí)際應(yīng)用價(jià)值。
您可以根據(jù)需要對(duì)其進(jìn)行修改,然后將其移植到您自己的項(xiàng)目中。
下面的代碼重要的是結(jié)構(gòu)和思想。
有必要向它學(xué)習(xí)。
#include #include #define uint32_t unsigned int / *此宏的順序必須與結(jié)構(gòu)RawToVal_Map_t中變量的順序相對(duì)應(yīng),否則將報(bào)告錯(cuò)誤* / #define VAL_SWAP(Ch,Convert){&(Ch .wRawInValue),轉(zhuǎn)換和(Ch.dwInValue))//函數(shù)聲明void AD_CH1(uint32_t * pRawValue,uint32_t * pValue); void AD_CH2(uint32_t * pRawValue,uint32_t * pValue);無(wú)效的AD_CH3(uint32_t_pValue); void AD_CH3(uint32_t_pValue)* uint32_t * pRawValue,* pRawValue,* pRaw * pRawValue,uint32_t * pValue); typedef struct_AD_Ch_t {uint32_t dwInValue; //轉(zhuǎn)換值uint32_t wRawInValue; typedef struct_AD_Ch_t {uint32_t dwInValue; //轉(zhuǎn)換值uint32_t wRawInValue; uint32_t_wRawInValue; Channel_t_t_in,AD_AD_AD_in / AD_D_AD_D_AD_D_AD_AD_AD_AD_CH函數(shù)指針typedef void(* RawToVal_t)(uint32_t * pRawValue,uint32_t * pValue); //對(duì)應(yīng)于映射結(jié)構(gòu)typedef的數(shù)據(jù)數(shù)組struct _RawToVal_Map_t {uint32_t * pRawValue; RawToVal_t RawToVal; uint32_t * pValue;} RawToVal_Map_t; / * *數(shù)據(jù)映射數(shù)組/ RawToVal_Map_t MapArray [2] [2] = {//以下映射是一一對(duì)應(yīng)的,可以根據(jù)需要交叉映射VAL_SWAP(在AD_1,AD_CH1中),映射到// AD_CH1的通道1,AD_CH1 / /通道2的功能映射到通道2 {VAL_SWAP(in_AD_3,AD_CH3),//通道3的功能映射到通道3 VAL_SWAP(in_AD_4,AD_CH4)//通道4的功能映射到通道4(arg)(arg)(arg)(arg)(int); uint32_t i,j,ch = 1,bCh; RawToVal_Map_t * pMap; for(j = 0; j {for(i = 0; i {pMap =&(MapArray [j] [i])); //指向點(diǎn)映射數(shù)組數(shù)據(jù)的數(shù)據(jù)(*(pMap-> RawToVal) )(pMap-> pRawValue,pMap-> pValue);函數(shù)調(diào)用“ f” Ch%d RawVal是%d。
“,ch,*(pMap-> pRawValue)); //打印原始值printf(" Ch%d SwapVal是%d。
" Ch,*(pMap-> pValue)); // //打印專(zhuān)用于變量的轉(zhuǎn)換后的值通道,對(duì)于上述打印if(ch {ch ++;} else {ch = 1;}}}返回0;} / *以下四個(gè)函數(shù)非常簡(jiǎn)單,它們只進(jìn)行系數(shù)乘法和賦值,實(shí)際上可以變成實(shí)際的工程計(jì)算* / void AD_CH1(uint32_t * pRawValue,uint32_t * pValue){* pRawValue = 1; * pRawValue = * 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_CH uint32_t * pRawValue,uint32_t * pValue){* pRawValue = 1; * pRawValue * pValue = * pValue; * pValue = * pRawValue = * pValue = * pRawValue * 3; win_AD_3; win_AD_Value = * pInValue * 3;(uint32_t * pRawValue, uint32_t * pValue){* pRawValue = 1; * pValue = * pRawValue * 16; in_AD_4.wRawIn Value = * pRawValue; in_AD_4.dwInValue = * pValue;} 2)運(yùn)行結(jié)果摘要今天,我介紹了一種封裝structu的方法使用宏重新定義變量和函數(shù)入口,以實(shí)現(xiàn)函數(shù)映射和遍歷調(diào)用。
感興趣的朋友,快點(diǎn)嘗試代碼。
如有任何疑問(wèn),可以在后臺(tái)留言。
如果18年后重新申請(qǐng)了正式帳戶(hù),則文章后將不支持消息功能。
最后,以上是這次的分享。
如果您認(rèn)為這篇文章不錯(cuò),那么轉(zhuǎn)發(fā)和閱讀它也是我們不斷更新的動(dòng)力。
猜猜你喜歡它:2020年精選原始紙幣摘要protobuf-c的嵌入式平臺(tái)使用1024G嵌入式資源來(lái)送人!包括但不限于C / C ++,MCU,Linux等。
在官方帳戶(hù)聊天界面中回復(fù)1024,您可以免費(fèi)獲得它!免責(zé)聲明:本文內(nèi)容經(jīng)21ic授權(quán)后發(fā)布,版權(quán)歸原作者所有。
該平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
本文僅代表作者的個(gè)人觀點(diǎn),并不代表該平臺(tái)的立場(chǎng)。
如果喲