Ini untuk aplikasi tertanam yang berjalan pada level rendah di UC. Bagian lain dari sistem memerlukan pengaturan parameter dan UC lokal perlu memelihara daftar parameter. Setiap parameter terdiri dari ID 8 bit dan nilai 8 bit. ID dimulai pada 0x70 karena keterbatasan memori di ujung yang lain.
Untuk menjaga penggunaan memori serendah mungkin, saya telah mengimplementasikan penyimpanan parameter sebagai array yang berisi ID dan Nilai untuk semua parameter yang dapat ditulis. Kemudian ada daftar parameter ini yang disebutkan di file header untuk memungkinkan bagian lain dari aplikasi mengakses parameter tersebut.
Apakah ada cara untuk memastikan bahwa daftar enum dan array parameter memiliki entri yang sama dalam urutan yang sama? Saya telah mendokumentasikan kodenya dengan cukup teliti (tidak semua disertakan dalam ekstrak) tetapi saya ingin melakukan beberapa bentuk pemeriksaan pada waktu kompilasi untuk memastikan bahwa daftar dan array cocok.
Hal lain yang saya tidak yakin adalah apakah ini cara paling efisien untuk mengimplementasikannya. Saya harus dapat mengulangi parameter untuk mengirimkannya ke bagian lain dari sistem dan saya perlu menggunakan memori sesedikit mungkin.
Dari 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[];
Dari 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}
};