मेजबान पर एक एम्बेडेड प्रोजेक्ट के यूनिट परीक्षण करने के लिए, मैंने फंक्शन पॉइंटर्स का उपयोग करना शुरू किया ताकि वे एक समारोह के 'असली' कार्यान्वयन और रनटाइम पर एक नकली के बीच बदल सकें। तो, मेरी समारोह 'foo' इस तरह ग फ़ाइल में दिखता है:जीसीसी: क्या आप फ़ंक्शन पॉइंटर्स को किसी भिन्न सेक्शन (नहीं .डेटा) में डाल सकते हैं?
// the 'real' implementation of the function to be used during runtime
void fooImplementation ()
{
/* ... */
}
// the function pointer, initialized to the 'real' implementation
void (*foo) () = fooImplementation;
यह बाहर आ गया है कि लक्ष्य प्रोसेसर (Blackfin) एक अपवाद उत्पन्न करता है, क्योंकि समारोह सूचक आंतरिक एल 1 डेटा स्मृति में रहता है जो कोड ले जाने की अनुमति नहीं है बल्कि केवल डेटा है।
एक समाधान है कि काम करता है प्रत्येक कार्य सूचक को एक विशेषता आवंटित करने के लिए तो यह एक अलग अनुभाग कि एल 1 डेटा स्मृति में रहते हैं नहीं करता है, उदाहरण के लिए में डाल दिया है है:
void (*foo) () __attribute__ ((section(".ext_mem"))) = fooImplementation;
लेकिन इस कोड एक बनाता है पढ़ने के लिए थोड़ा मुश्किल है और त्रुटि प्रवण है (यदि आप विशेषता असाइन करना भूल जाते हैं, तो यूनिट परीक्षण ठीक चलेंगे लेकिन जैसे ही फ़ंक्शन को लक्ष्य पर कॉल किया जाता है) कोड अपवाद उत्पन्न करेगा।
तो मेरा सवाल यह है कि यदि सभी फ़ंक्शन पॉइंटर्स को डिफ़ॉल्ट रूप से किसी भिन्न सेक्शन में रखने के लिए जीसीसी को बताने का कोई तरीका है।