मेरे पास एक कॉन्फ़िगरेशन संरचना है जिसे मैं एआरएम कॉर्टेक्स एम 3 के आंतरिक फ्लैश पर सहेजना चाहता हूं। विनिर्देशों के अनुसार, आंतरिक फ्लैश में डेटा सहेजना, 32 बिट के साथ गठबंधन किया जाना चाहिए। क्योंकि मेरे पास बहुत सारी बूलियन है, और मेरी संरचना में वर्ण हैं, मैं 8 बिट्स स्टोर करने के लिए 32 बिट्स का उपयोग नहीं करना चाहता ... मैंने __packed
प्रीप्रोसेसर प्राग्मा का उपयोग करके संरचना को पैक करने का निर्णय लिया, फिर जब मैं इसे पूरी संरचना के रूप में सहेजता हूं , मुझे बस यह सुनिश्चित करना है कि संरचना का आकार 4 (4 बाइट्स = 32 बिट्स) द्वारा विभाजित है, यदि आवश्यक हो तो मैं इसे पैडिंग बाइट जोड़कर करता हूं। वर्तमान में, विकास के दौरान मैं संरचना को बहुत बदलता हूं, और इसे 32 बिट्स के साथ गठबंधन करने के लिए, मुझे हर समय पैडिंग बाइट्स को बदलने की ज़रूरत है। वर्तमान में, संरचना चित्र इसआंतरिक फ्लैश मेमोरी में सी संरचना का संरेखण
typedef __packed struct
{
uint8_t status;
uint16_t delay;
uint32_t blabla;
uint8_t foo[5];
uint8_t padding[...] // this has to be changed every time I alter the structure.
} CONFIG;
वहाँ मैं क्या कर रहा हूँ प्राप्त करने के लिए एक बेहतर तरीका है देखने के लिए? मैं एंबेडेड प्रोग्रामिंग में काफी नया हूं, और मैं यह सुनिश्चित करना चाहता हूं कि मैं गलती नहीं कर रहा हूं।
संपादित करें: कृपया ध्यान दें। डेटा आंतरिक फ्लैश के अंत में एक समान होती है, तो गद्दी काम नहीं करेगा ...
मुझे विश्वास था कि आपकी समझ सही नहीं है। फ्लैश मेमोरी में निर्देशों को गठबंधन किया जाना चाहिए और यह संकलक द्वारा गारंटी दी जाएगी। लेकिन फ्लैश में संग्रहीत डेटा को भी अनियंत्रित किया जा सकता है जिसे आर्म कॉर्टेक्स एम 3 कोर द्वारा प्रबंधित किया जा सकता है। आप किस कंपनी का एमसीयू उपयोग करते हैं? –