2008-09-19 6 views
5

विकास मंच के रूप में vxWorks का उपयोग करते समय, हम अपने आवेदन को मानक मुख्य() फ़ंक्शन के साथ नहीं लिख सकते हैं। हमारे पास मुख्य कार्य क्यों नहीं हो सकता है?vxWorks में कोई मुख्य() फ़ंक्शन क्यों नहीं है?

उत्तर

13

से पहले 6.0 संस्करण VxWorks केवल समर्थित गिरी कार्यों के लिए निष्पादन वातावरण और प्रक्रियाओं, जो यूनिक्स या Windows की तरह ओएस पर पारंपरिक आवेदन निष्पादन वातावरण है समर्थन नहीं किया। कार्यों में एक प्रविष्टि बिंदु है जो एक कार्य के रूप में निष्पादित करने के लिए कोड के पता है। यह पता एक सी या असेंबली फ़ंक्शन से मेल खाता है। यह "मुख्य" नामक प्रतीक हो सकता है लेकिन वहां मुख्य() फ़ंक्शन के बारे में सी/सी ++ भाषा धारणाएं हैं जो कर्नेल पर्यावरण में समर्थित नहीं हैं (विशेष रूप से पारंपरिक argc और argv पैरामीटर का संचालन)। इसके अलावा, VxWorks 6.0 से पहले, सभी कार्य कर्नेल कोड निष्पादित करते हैं। आप कर्नेल को एक साथ जुड़े कोड के सामान्य भंडार के रूप में चित्रित कर सकते हैं और फिर आपको दिखाई देगा कि के बाद से आप एक ही नाम ("मुख्य") के कई प्रतीकों नहीं रख सकते हैं, यह नाम टकराव बनाएगा।

अब यह सही है अगर आप अपने आवेदन कोड को कर्नेल छवि से लिंक करते हैं। यदि आप अपना आवेदन कोड डाउनलोड करना चाहते हैं तो मॉड्यूल लोडर मुख्य() दिनचर्या के साथ प्रत्येक मॉड्यूल लोड करने के लिए स्वीकार करेगा। हालांकि सिस्टम प्रतीक तालिका में पंजीकृत अंतिम "मुख्य" प्रतीक केवल एकमात्र है जिसे आप लक्ष्य खोल के माध्यम से एक्सेस कर सकते हैं। यदि आप पहले लोड किए गए मॉड्यूल में से किसी एक के कोड को निष्पादित करने वाले कार्यों को प्रारंभ करना चाहते हैं, तो आपको पिछले मुख्य() फ़ंक्शन के पते का उपयोग करना होगा। यह संभव है लेकिन सुविधाजनक नहीं है। यह कार्यों के प्रवेश बिंदुओं के लिए अलग-अलग नाम देने के लिए व्यावहारिक है ( "xxxStart" जैसा हो सकता है जहां "xxx" एक नाम है जिसका कार्य करना है)।

VxWorks 6.0 से शुरू ओएस एक प्रक्रिया वातावरण का समर्थन करता है। यह का मतलब है कि, कई अन्य चीजों के बीच, आपके पास पारंपरिक मुख्य() दिनचर्या हो सकती है और इसके argc और argv पैरामीटर ठीक से संभाले जाते हैं, और यह कि एप्लिकेशन कोड संदर्भ (उपयोगकर्ता संदर्भ) में निष्पादित हो रहा है जो अलग है कर्नेल संदर्भ से, इस प्रकार एप्लिकेशन कोड (जो flaky हो सकता है) और कर्नेल कोड (जो flaky नहीं माना जाता है) के बीच अलगाव सुनिश्चित करना। पीएडी