部分参考了https://cloud.tencent.com/developer/article/1692961
同时在电脑上进行验证
//温度,电磁阀传感器序号,方便数组定位
typedef enum
{
TC314=0,
TC355,
TC633,
TC661,
TC668,
TC_NUM_MAX=5, //共5个温度
//电磁阀序号,方便数组定位,但要减去TC_NUM_MAX
SOV311=5,
SOV351,
SOV461,
SOV667,
SOV455,
SOV456,
SOV457,
SOV458,
SOV_NUM_MAX=8, //共8个电磁阀
}e_AD8494_TC_NUM;
//保存该电路板中的设备标号,用于对比
const int Device_ID_Table[]=
{
[TC314]=314,
[TC355]=355,
[TC633]=633,
[TC661]=661,
[TC668]=668, //temp
[SOV311]=311,
[SOV351]=351,
[SOV461]=461,
[SOV667]=667, //sov
[SOV455]=455,
[SOV456]=456,
[SOV457]=457,
[SOV458]=458
};
const static int Device_ID_Order[] =
{
TC314, TC355, TC633, TC661, TC668, //temp
SOV311, SOV351, SOV461, SOV667, //sov
SOV455, SOV456, SOV457, SOV458
};
int size = sizeof(Device_ID_Order)/sizeof(Device_ID_Order[0]);
for (size_t i = 0; i < size; i++)
{
/* code */
printf("%d\n",Device_ID_Order[i]);
}
之所以这么写,是因为系统中的变化会随着板子更新而更新,总不能每个工程都在代码中进行一个一个输入,这个操作可以让代码增加扩展性,只要在数组中更改标号即可,而不用在函数中,逐个修改每个语句。
在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动,然而C++在自己的标准化创建过程中继续发展壮大。《标准修正案一》在1994年为C语言创建了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过,这个标准引出了1999年ISO 9899:1999的发表。它通常被称为C99。C99被ANSI于2000年3月采用。
在C99中包括的特性有:
但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的时候[4],微软和Borland却似乎对此不感兴趣。
为了避免这种隐患可以在定义数组时候使用枚举作为数组的下标,这样即使数据输入混乱,但是只要数组定义时候枚举下标定义和数组成员可以对应正确就可以避免这种错误。
pUART[index++] = (Device_ID_Table[0] >> 8); //温度1标号高字节
pUART[index++] = (uint8_t)Device_ID_Table[0]; //温度1标号低字节
pUART[index++] = g_Device_Info.Temperature[Device_ID_Order[0]] >> 8; //温度1高字节
pUART[index++] = g_Device_Info.Temperature[Device_ID_Order[0]]; //温度1低字节