นี่เป็นสำหรับแอปพลิเคชันแบบฝังที่ทำงานในระดับต่ำบน uC อีกส่วนหนึ่งของระบบจำเป็นต้องมีการตั้งค่าพารามิเตอร์ และ uC ภายในเครื่องจำเป็นต้องรักษารายการพารามิเตอร์ไว้ แต่ละพารามิเตอร์ประกอบด้วย ID 8 บิตและค่า 8 บิต ID เริ่มต้นที่ 0x70 เนื่องจากข้อจำกัดของหน่วยความจำที่ปลายอีกด้านหนึ่ง
เพื่อรักษาการใช้หน่วยความจำให้ต่ำที่สุดเท่าที่จะเป็นไปได้ ฉันได้ใช้ที่เก็บพารามิเตอร์เป็นอาร์เรย์ที่มี ID และค่าสำหรับพารามิเตอร์ที่เขียนได้ทั้งหมด จากนั้นจะมีรายการพารามิเตอร์เหล่านี้ที่แจกแจงไว้ในไฟล์ส่วนหัวเพื่อให้ส่วนอื่นๆ ของแอปพลิเคชันสามารถเข้าถึงพารามิเตอร์ได้
มีวิธีใดที่จะแน่ใจได้ว่ารายการแจงนับและอาร์เรย์ของพารามิเตอร์มีรายการเดียวกันในลำดับเดียวกันหรือไม่ ฉันได้บันทึกโค้ดไว้อย่างละเอียดถี่ถ้วน (ไม่รวมอยู่ในสารสกัดทั้งหมด) แต่ฉันต้องการตรวจสอบบางรูปแบบ ณ เวลาคอมไพล์เพื่อให้แน่ใจว่ารายการและอาร์เรย์ตรงกัน
อีกสิ่งหนึ่งที่ฉันไม่แน่ใจก็คือว่านี่เป็นวิธีที่มีประสิทธิภาพที่สุดในการดำเนินการนี้หรือไม่ ฉันจำเป็นต้องสามารถวนซ้ำพารามิเตอร์ต่างๆ เพื่อส่งข้อมูลไปยังส่วนอื่นๆ ของระบบ และฉันจำเป็นต้องใช้หน่วยความจำน้อยที่สุดเท่าที่จะเป็นไปได้
จาก parameters.h
:
/*******************************************************************************/
/* IDs for all parameters must be defined */
/* Defaults only need to be defined for rut-time writable parameters */
/* All parameters must have an ID define */
/* Writable parameters must also have: */
/* * DefaultValue define */
/* * Entry in ParamIndex */
/* * Initialesed default entry in Parameters (contained in C file) */
/* * If min and max values are not 0x00 and 0xFF then define those too */
/*******************************************************************************/
// Parameter IDs - All parameters need this defining
#define Param_ActualTemp_ID 0xE0
#define Param_OperationMode_ID 0xE1
#define Param_MaintenanceModePID0_ID 0xE5
#define Param_MaintenanceModePID1_ID 0xE6
#define Param_FirmwareVersionL_ID 0xEB
#define Param_FirmwareVersionH_ID 0xEC
#define Param_SerialNumberL_ID 0xED
#define Param_SerialNumberH_ID 0xEE
#define Param_SerialNumberHH_ID 0xEF
#define Param_MaxTemperature_ID 0xFC
#define Param_NULL_ID 0xFF
// Parameter Default Values - All writable parameters need this defining
#define Param_NULL_DefaultValue 0xFF
#define Param_OperationMode_DefaultValue 0
#define Param_MaintenanceModePID0_DefaultValue 0xFF
#define Param_MaintenanceModePID1_DefaultValue 0xFF
#define Param_MaxTemperature_DefaultValue 0x54
typedef struct
{
const uint8 id;
uint8 value;
} PARAMETER;
// Parameter Index, any writable parameters need an entry here
// Used as array index for parameters[], do not edit existing values
typedef enum
{
Param_NULL = 0,
Param_OperationMode,
Param_MaintenanceModePID0,
Param_MaintenanceModePID1,
Param_MaxTemperature,
/* Additional values must be entered above this line */
Param_NUMBER_OF_IMPLEMENTED_PARAMS
} ParamIndex;
extern PARAMETER parameters[];
จาก parameters.c
:
PARAMETER parameters[] = {
{ .id = Param_NULL_ID, .value = Param_NULL_DefaultValue},
{ .id = Param_OperationMode_ID, .value = Param_OperationMode_DefaultValue},
{ .id = Param_MaintenanceModePID0_ID, .value = Param_MaintenanceModePID0_DefaultValue},
{ .id = Param_MaintenanceModePID1_ID, .value = Param_MaintenanceModePID1_DefaultValue},
{ .id = Param_MaxTemperature_ID, .value = Param_MaxTemperature_DefaultValue}
};