欢迎来到我司精密电阻产品网站!
实用文章:使用宏实现函数功能映射
精密电阻 2024-10-31

1实现思想该示例代码旨在在处理类似事务时提供功能映射关系。

功能功能不同,但功能结构相同。

通过数组和结构映射函数功能,在函数体内处理数据,实现变量分配,并通过函数指针调用函数。

因为结构相似,所以for循环可用于遍历所有映射函数。

修改功能时,只需修改功能,无需更改映射结构,为代码的维护提供了极大的方便。

2示例代码1)实现代码以下代码模拟了AD通道采样和转换映射调用方法。

它只是模拟,没有实际应用价值。

您可以根据需要对其进行修改,然后将其移植到您自己的项目中。

下面的代码重要的是结构和思想。

有必要向它学习。

#include #include #define uint32_t unsigned int / *此宏的顺序必须与结构RawToVal_Map_t中变量的顺序相对应,否则将报告错误* / #define VAL_SWAP(Ch,Convert){&(Ch .wRawInValue),转换和(Ch.dwInValue))//函数声明void AD_CH1(uint32_t * pRawValue,uint32_t * pValue); void AD_CH2(uint32_t * pRawValue,uint32_t * pValue);无效的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; //转换值uint32_t wRawInValue; typedef struct_AD_Ch_t {uint32_t dwInValue; //转换值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函数指针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(在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])); //指向点映射数组数据的数据(*(pMap-> RawToVal) )(pMap-> pRawValue,pMap-> pValue);函数调用“ f” Ch%d RawVal是%d。

“,ch,*(pMap-> pRawValue)); //打印原始值printf(" Ch%d SwapVal是%d。

" Ch,*(pMap-> pValue)); // //打印专用于变量的转换后的值通道,对于上述打印if(ch {ch ++;} else {ch = 1;}}}返回0;} / *以下四个函数非常简单,它们只进行系数乘法和赋值,实际上可以变成实际的工程计算* / 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)运行结果摘要今天,我介绍了一种封装structu的方法使用宏重新定义变量和函数入口,以实现函数映射和遍历调用。

感兴趣的朋友,快点尝试代码。

如有任何疑问,可以在后台留言。

如果18年后重新申请了正式帐户,则文章后将不支持消息功能。

最后,以上是这次的分享。

如果您认为这篇文章不错,那么转发和阅读它也是我们不断更新的动力。

猜猜你喜欢它:2020年精选原始纸币摘要protobuf-c的嵌入式平台使用1024G嵌入式资源来送人!包括但不限于C / C ++,MCU,Linux等。

在官方帐户聊天界面中回复1024,您可以免费获得它!免责声明:本文内容经21ic授权后发布,版权归原作者所有。

该平台仅提供信息存储服务。

本文仅代表作者的个人观点,并不代表该平台的立场。

如果哟