2012-08-28 16 views
5

मैं एक एसटीएम 32 एफ 4 बोर्ड के साथ एक नंगे धातु एचएमआई मंच विकसित करने के साथ राइसेंस की राइड 7/कोड्सोरकेरी (ए.के.ए. सोर्सरी कोडबेंच लाइट) का उपयोग कर रहा हूं।जीसीसी आर्म-नो-एबी (कोड्सोरकरी) और सी ++ अपवाद

मैं इस प्रणाली में सी ++ अपवादों का उपयोग कर रहा हूं, लेकिन मैं जो भी अपवाद फेंकता हूं वह "टर्मिनेट को रिकर्सिव" नामक त्रुटि के साथ समाप्त होता है। समस्या पुन: पेश करने

कोड: (main.cpp)

int main(void) 
{ 
    try { 
     throw 1; 
    } 
    catch (...) { 
     printf("caught"); 
    } 
} 

मैं पहले से ही Raisonance और एक संकल्प के लिए अन्य स्रोतों की कोशिश की है, और किसी भी कार्रवाई योग्य मदद नहीं मिली है।

संभावित समस्या/समाधान 1:

मैं अन्य मंचों पर कहा है और वे मैं अपने स्टार्टअप विधानसभा फ़ाइल में स्थिर निर्माण कॉल करने के लिए खोलना टेबल प्रारंभ करने में (कम से कम मैं वे क्या सोचते है कि जरूरत का उल्लेख के बारे में बात कर रहे हैं), लेकिन मुझे नहीं पता कि यह कैसे करना है।

संभावित समस्या/समाधान 2

मैं भी/गैस binutils में एक बग मेरे यहाँ समस्याओं (http://sourceware.org/bugzilla/show_bug.cgi?id=13449) का स्रोत हो सकता है कि खोज की है। मैं इस पैच के साथ टूलचैन का अपना संस्करण बनाने की कोशिश कर रहा हूं, लेकिन यह अपनी परियोजना में बदल रहा है, और अभी तक सफल नहीं हुआ है।

प्रश्न

मैं कोड में कुछ करने की जरूरत है सी ++ अपवाद का उपयोग करने के, या इस संभावना toolchain में एक बग है? यदि पूर्व, कृपया विस्तृत करें।

+0

बहुत कम एम्बेडेड toolchains समर्थन अपवाद ठीक से, सब पर अगर। मेरी राय में, एम्बेडेड सॉफ़्टवेयर में अपवादों का उपयोग करना एक बुरा विचार है। –

+2

@ इगोरस्कोचिनस्की मुझे पता था कि कोई ऐसा कहने जा रहा था। कोड्सोरकेरी के दस्तावेज स्पष्ट रूप से सी ++ अपवादों के लिए समर्थन बताते हैं। मैं अपनी आवश्यकताओं को जानता हूं और मुझे पता है कि अपवादों का उपयोग करना मेरे प्रोजेक्ट का सही निर्णय है, लेकिन यह सवाल के लिए अप्रासंगिक है। – Verax

+0

@verax आप किस libc के खिलाफ जुड़े हुए हैं? मुझे आश्चर्य है कि क्या आपके पास कोई मेल नहीं है? – marko

उत्तर

2

कुछ समझने के बाद जो आवश्यक नहीं होना चाहिए था, अंततः राइज़ेंसेंस अपनी डिफ़ॉल्ट लिंकर स्क्रिप्ट में संशोधन के साथ आया जिसने समस्या को ठीक किया। यह कानूनी मुझे पूरे लिंकर स्क्रिप्ट पोस्ट करने के लिए नहीं हो सकता है, लेकिन यहाँ ज्ञान (नाम YourMemory एक को पता है

.text अनुभाग

*(.eh_frame) 

को यह जोड़े इन वर्गों जोड़े की जरूरत है कि अनुसार है आपके लिंकर स्क्रिप्ट में स्थापित स्मृति ब्लॉक में।मेरा फ्लैश)

.ARM.extab : 
{ 
    *(.ARM.extab* .gnu.linkonce.armextab.*) 
} >YourMemory 

.ARM : 
{ 
    __exidx_start = .; 
    *(.ARM.exidx*) 
    __exidx_end = .; 
} >YourMemory 

सुनिश्चित इस लाइन बीएसएस अनुभाग

*(.bss*) 

हालांकि इस खोज पर, मैं निम्नलिखित उपयोगी संसाधनों भर में भाग गया में होता था