मेरे पास मेरे कोड में एक अजीब बग है जो इसे गायब करने का प्रयास करते समय गायब हो जाता है।ब्रेकपॉइंट सेट होने पर श्रोडिंगर बग गायब हो रहा है
मेरी टाइमर व्यवधान में (हमेशा प्रणाली टिकर चल) मैं कुछ इस तरह है: अपने मुख्य पाश में
if (a && lot && of && conditions)
{
some_global_flag = 1; // breakpoint 2
}
मैं
if (some_global_flag)
{
some_global_flag = 0;
do_something_very_important(); // breakpoint 1
}
है मुख्य पाश में यह स्थिति कभी नहीं जब कहा जाता है टाइमर में स्थितियां (मुझे लगता है) पूर्ण हैं। शर्तें बाहरी हैं (पोर्टपिन, एडीसी परिणाम, आदि)। सबसे पहले मैंने स्थिति 1 पर ब्रेकपॉइंट लगाया, और यह कभी ट्रिगर नहीं हुआ।
इसे जांचने के लिए, मैंने ब्रेकपॉइंट एनआर रखा। 2 some_global_flag = 1;
पर लाइन, और इस मामले में कोड काम करता है: दोनों शर्तों को सत्य होने पर ब्रेकपॉइंट ट्रिगर किए जाते हैं।
अद्यतन 1:
if (a && lot && of && conditions)
{
some_global_flag = 1; // breakpoint 2
}
if (some_global_flag)
{
#asm("NOP"); // breakpoint 3
}
:
कि क्या कुछ समय हालत जिम्मेदार है, और टाइमर में if
डिबगिंग के बिना चल रहा है, तो दर्ज नहीं किया गया है अनुसंधान करने के लिए, मैं अपने टाइमर में निम्नलिखित जोड़ा
ध्वज कोड में कहीं और नहीं उपयोग किया जाता है। यह रैम में है, और रैम शुरुआत में शून्य से साफ़ हो गया है।
अब, जब सभी ब्रेकपॉइंट अक्षम होते हैं (या मुख्य में केवल ब्रेकपॉइंट 1 सक्षम होता है), कोड सही ढंग से काम नहीं करता है, फ़ंक्शन निष्पादित नहीं होता है। हालांकि, अगर मैं एनओपी पर केवल ब्रेकपॉइंट 3 सक्षम करता हूं, तो कोड काम करता है! ब्रेकपॉइंट ट्रिगर किया गया है, और जारी रखने के बाद, फ़ंक्शन निष्पादित किया जाता है।
टाइमर बाधा व्यवधान कारक था, इसकी शुरुआत में एक "एसईआई" के माध्यम से: अद्यतन 2 (यह दिखाई और सुनाई देती आउटपुट है, तो यह स्पष्ट है अगर यह चलता है)
। मैंने उस रेखा को हटा दिया, लेकिन व्यवहार किसी भी ध्यान देने योग्य तरीके से नहीं बदला गया है।
अद्यतन 3:
मैं किसी भी बाहरी मेमोरी का उपयोग नहीं कर रहा हूँ। जैसा कि मैं फ्लैश में सीमा के बहुत करीब हूं, मेरे पास अधिकतम संकलक में आकार अनुकूलन है।
क्या संकलक (कोडविजन) जिम्मेदार हो सकता है, या मैंने कुछ गलत किया है?
क्या ब्रेकपॉइंट्स सेट करने के बजाए आप कुछ प्रकार के लॉगिंग जोड़ने का प्रयास कर सकते हैं? मैं आमतौर पर सुझाव देने में संकोच करता हूं, लेकिन इस मामले में यह सिस्टम को कम परेशान कर सकता है। विशेष रूप से, मैं जो लॉग इन करूंगा वह टाइमर इंटरप्ट कोड के माध्यम से प्रत्येक पास पर आपकी शर्तों की स्थिति है। –
कुछ_global_flag कैसे परिभाषित किया गया है? क्या आप 'volatile int some_global_flag' का उपयोग कर रहे हैं? – DipSwitch
क्या आप बाहरी मेमोरी का उपयोग कर रहे हैं? या सिर्फ आंतरिक एसआरएएम? आप वास्तव में किस चिप का उपयोग कर रहे हैं? – DipSwitch