यह एक एम्बेडेड एप्लिकेशन के लिए है जो यूसी पर निम्न स्तर पर चलता है। सिस्टम के एक अन्य भाग को पैरामीटर सेट करने की आवश्यकता होती है और स्थानीय यूसी को पैरामीटर की सूची बनाए रखने की आवश्यकता होती है। प्रत्येक पैरामीटर में 8 बिट आईडी और 8 बिट मान होता है। दूसरे छोर पर स्मृति सीमाओं के कारण आईडी 0x70 पर शुरू होती है।कैसे सुनिश्चित करें कि enum और array में संकलन पर एक ही प्रविष्टियां हों?
स्मृति उपयोग को यथासंभव कम रखने के लिए मैंने पैरामीटर स्टोर को सभी लिखने योग्य मानकों के लिए आईडी और मान युक्त सरणी के रूप में कार्यान्वित किया है। फिर पैरामीटर तक पहुंचने के लिए एप्लिकेशन के अन्य हिस्सों को अनुमति देने के लिए हेडर फ़ाइल में इन पैरामीटर की एक विस्तृत सूची है।
क्या यह सुनिश्चित करने का कोई तरीका है कि enum सूची और पैरामीटर की सरणी एक ही क्रम में एक ही प्रविष्टि है? मैंने कोड को काफी अच्छी तरह से दस्तावेज किया है (सभी अर्क में शामिल नहीं हैं) लेकिन मैं यह सुनिश्चित करने के लिए संकलित समय पर कुछ प्रकार के चेक डालना चाहता हूं कि सूची और सरणी मिल जाए।
एक और चीज मुझे यकीन नहीं है कि यह इसे लागू करने का सबसे प्रभावी तरीका है। मुझे सिस्टम के दूसरे भाग में संचारित करने के लिए पैरामीटर के माध्यम से पुन: प्रयास करने में सक्षम होना चाहिए और मुझे जितनी संभव हो उतनी छोटी मेमोरी का उपयोग करने की आवश्यकता है।
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}
};
मुझे लगता है कि मेरे कंपाइलर (जीसीसी 4.1 से व्युत्पन्न) के साथ काम कर रहे एक स्थिर जोर मैक्रो को नहीं मिल रहा है, लेकिन नामित प्रारंभकर्ता यह एक अच्छा विचार है कि मुझे पता नहीं था। मैंने यह भी जोड़ा है कि मैं और मैं यह सुनिश्चित कर दूंगा कि इस परियोजना के अन्य डेवलपर को मैंने जो किया है उसके बारे में पता है। मैं शायद भविष्य में इस कोड पर रखरखाव करने वाला हूं। – RobbG
@RobbG स्टेटिक आवेषण सी 11 के साथ पेश किया गया था, जो बदले में जीसीसी 4.8 के आसपास कहीं पेश किया गया था। हालांकि आप किसी भी सी संकलक पर अपने घर से बने स्थिर आवेषण मैक्रो का उपयोग करने में सक्षम होना चाहिए। – Lundin