接上一篇文章,函数、指针、数组(2),我们聊过了函数、指针、数组混搭结果:指针数组
数组指针
指针函数
函数指针
函数指针数组
。本文主要讲述在工程中我们常用的结构体数组,主要应用场景,IF初始化等集成度比较的复用函数接口。
下面来看个例子,
/**
* 电机驱动电流配置结构
*/
typedef struct _st_STmIcPrm
{
u16 Ips10x;
u16 SpdIdx;
u16 Ic_mA;
} st_STmIcPrm;
typedef struct _st_STmIcPrm_info
{
st_STmIcPrm *IcPrm;
u8 size;
}st_STmIcPrm_info;
st_STmIcPrm PFM_SPD_2_CUR[6] =
{
// Ips10x SpdIdx Ic_mA
{ 20, 0, 1800 }, // 0
{ 30, 0, 1800 }, // 1
{ 40, 0, 1800 }, // 2
{ 50, 0, 1800 }, // 3
{ 60, 0, 1800 }, // 4
{ 80, 0, 1800 }, // 5
};
st_STmIcPrm PFM_SPD_2_CUR1[6] = //二维数组
{
// Ips10x SpdIdx Ic_mA
{ 20, 0, 1000 }, // 0
{ 30, 0, 1200 }, // 1
{ 40, 0, 1500 }, // 2
{ 50, 0, 1500 }, // 3
{ 60, 0, 1600 }, // 4
{ 80, 0, 1800 }, // 5
};
st_STmIcPrm_info PFM_SPD_2_CUR_LIST[2] =
{
{PFM_SPD_2_CUR ,ARRAY_SIZE(PFM_SPD_2_CUR)}, //走纸定位
{PFM_SPD_2_CUR1,ARRAY_SIZE(PFM_SPD_2_CUR1)},//正常使用
};
1.要求通过查表的方式取出PFM_SPD_2_CUR_LIST
数组中所有的值,
static void *PFmCurrentSet(CMDCTRL *pCtrl)
{
extern st_STmIcPrm_info PFM_SPD_2_CUR_LIST[2];
st_STmIcPrm *IcPrmIdx;
u16 Ic_mA = 0;
u8 i, j,cnt,items;
cnt =(u8)ARRAY_SIZE(PFM_SPD_2_CUR_LIST);
for(i=0;i<cnt;i++){
IcPrmIdx = PFM_SPD_2_CUR_LIST[i].IcPrm;
items = PFM_SPD_2_CUR_LIST[i].size;
CONSOLE_TRACE("PFM Drive Current Table:%d\r\n",i);
CONSOLE_STR(" No. IPS mA\r\n");
CONSOLE_STR("-------------------\r\n");
for (j = 0; j < items; j++) {
CONSOLE_TRACE(" %d %d.%d %4d\r\n", j,
IcPrmIdx->Ips10x/10,IcPrmIdx->Ips10x%10,IcPrmIdx->Ic_mA);
IcPrmIdx++;
}
}
CONSOLE_STR("\r\n");
}
编译输出:
2.要求通过指针修改表的值
(PFM_SPD_2_CUR_LIST[i].IcPrm)->Ic_mA= Ic_mA;
总结:
本文主要是和大家分享结构体类型数组的创建和赋值,更多的用法大家可以去发挥自己的脑洞。