在ICC7.14下程序运行正常。但是用ICC7.19后,程序运行不正常。
现象为:从ROM的结构体中取出的“数据”是乱的。
(1)、 以下是定义了一个结构体,保存默认参数到ROM中(用于键盘设定)。
typedef struct tagFORMAT_STRUCT
{
INT8U Name[5]; // 参数名称
INT8U Decimal; // 参数的格式(小数点位置)
INT16S Min; // 参数的最小值
INT16S Max; // 参数的最大值
INT16S Default; // 参数的默认值
} FORMAT_STRUCT , *FORMAT_STRUCT_PTR;
(2)、以下是结构体初始化部分
flash FORMAT_STRUCT DEFAULT_BUFFER[SET_BUFFER_LENGTH] = {
{ {0x00,0x00,0x39,0x38,0x7A}, 0x10 , 0 , 9999 , 0},
{ {0x00,0x00,0x00,0x00,0x73}, 0x13 , 0 , 9999 , 500},
{ {0x00,0x00,0x00,0x00,0x30}, 0x13 , 0 , 9999 , 10},
{ {0x00,0x00,0x00,0x00,0x5E}, 0x13 , 0 , 9999 , 0},
{ {0x00,0x5C,0x7C,0x31,0x06}, 0x00 , 0 , 15000 , 0},
{ {0x00,0x00,0x6D,0x38,0x6D}, 0x10 , 100 , 2000 , 240},
{ {0x00,0x5C,0x7C,0x31,0x5B}, 0x11 , 0 , 1000 , 0},
{ {0x00,0x00,0x6D,0x38,0x7D}, 0x40 , 1 , 9 , 7},
{ {0x00,0x00,0x6D,0x38,0x07}, 0x10 , 100 , 2000 , 240},};
(3)、以下是从ROM结构体中取出当前键盘设定参数的“参数名”
void DISPLAY_NAME(INT8U number,INT8U ch_type)
{
INT8U *p = BUFFER_ADDR_POINTER(ch_type);
*p++ = DEFAULT_BUFFER[number-1].Name[0];
*p++ = DEFAULT_BUFFER[number-1].Name[1];
*p++ = DEFAULT_BUFFER[number-1].Name[2];
*p++ = DEFAULT_BUFFER[number-1].Name[3];
*p = DEFAULT_BUFFER[number-1].Name[4];
} |