2009-07-29 5 views
5

से डेटा पढ़ें मैं सी का उपयोग कर सीरियल पोर्ट से डेटा कैसे पढ़ूं? और फिर डेटा को मॉडेम में फिर से स्थानांतरित करें? मैं धारावाहिक संचार के लिए आरएस 232 केबल का उपयोग कर रहा हूं ...सीरियल पोर्ट

+2

क्या ऑपरेटिंग सिस्टम? –

+2

क्या हार्डवेयर/मंच? – DaveR

+1

आपको निश्चित रूप से इस प्रश्न में अधिक जानकारी जोड़ने की आवश्यकता है। – Johan

उत्तर

2

सबसे पहले यह आपके द्वारा उपयोग किए जाने वाले ओएस पर बहुत निर्भर है।

* निक्स प्रकार के लिए आप आमतौर पर सामान्य फ़ाइल (/ dev/ttyS0, उदाहरण के लिए) जैसे सीरियल पोर्ट डिवाइस खोलते हैं, और इसे पढ़ने या लिखना शुरू करते हैं। खिड़कियों के लिए, मैं आपको एक विश्वसनीय पुस्तकालय की खोज करने की सलाह दे सकता हूं, क्योंकि विंडोज सीरियल संचार वास्तविक दुःस्वप्न हो सकता है। इससे भी ज्यादा, पुराने विंडोज संस्करणों और कभी भी कुछ के बीच कुछ मतभेद हो सकते हैं।

व्यक्तिगत रूप से, क्योंकि मैं wxwidgets उपयोगकर्ता हूं, मैं wxCTB का उपयोग करता हूं। आपको लाइब्रेरी की तलाश करनी चाहिए जो आपके द्वारा उपयोग किए जा रहे आईडीई के अनुरूप होगी।

प्रभारी लिंक के कुछ मुक्त;) www.robbayer.com/files/serial-win.pdf www.lookrs232.com/com_port_programming/

+0

एम्बेडेड के लिए इतना लागू नहीं है (इसे टैग किया गया 'एम्बेडेड')। –

+0

सच नहीं है। एम्बेडेड * आमतौर पर * लिनक्स या विनसी का मतलब है। –

6

दोनों पर सीरियल पोर्ट के साथ काम कर के बारे में उपयोगी जानकारी का एक बहुत पीसी और तार के डिवाइस के अंत में 0xपुस्तक के लिए जनवरी एक्सेलसन की साइट पर पाया जा सकता है।

बंदरगाह के साथ वास्तविक बातचीत अत्यधिक प्लेटफार्म-विशिष्ट होगी। अधिकांश स्वादों के * निक्स पर आप /dev/ttya जैसे कुछ डिवाइस खोलते हैं और पोर्ट को पढ़ने, लिखने और कॉन्फ़िगर करने के लिए read(), write(), और ioctl() का उपयोग करते हैं।

Windows पर, आप CreateFile() समारोह के साथ COM1 (या \\.\COM1 कुछ जायके पर) नाम की एक फ़ाइल को खोलने, और उसके बाद करने के लिए कॉन्फ़िगर किया और SetCommState() की तरह कार्य करता है और DCB संरचना के साथ खुश। विवरण * निक्स पर करने वाली चीज़ों के लिए विस्तृत रूपरेखा में समान हैं, लेकिन पूरी तरह से अलग तरीके से व्यवस्थित हैं। आप MSDN पर COM पोर्ट्स को कॉन्फ़िगर करने और उपयोग करने की पूरी चर्चा पा सकते हैं।

एम्बेडेड डिवाइस पर, आप या तो सीधे UART के हार्डवेयर रजिस्टरों तक पहुंच सकते हैं या एक आरटीओएस के साथ बातचीत कर रहे हैं। किसी भी तरह से, डिवाइस पर कोड को व्यापक रूप से पोर्टेबल बनाने के लिए अनिवार्य रूप से कोई तरीका नहीं है।

0

विंडोज़ भूमि में, आपको बेहतर लाइब्रेरी मिलती है जो सभी जादू करता है।

निजी तौर पर मैं अपने हार्डवेयर (bootloaders, विन्यास और परीक्षण) से बात करने के साथ छोटे उपयोगिता डाल करने के लिए बोर्लेन्ड सी ++ उपयोग कर रहा हूँ और मैं TurboPower Async Professional Library कि डेल्फी और बीसीसी में दोनों काम करता है और खुला स्रोत है के साथ बहुत खुश हूँ (मोज़िला सार्वजनिक लाइसेंस 1.1)।

2

एम्बेडेड दुनिया में आपके कंपाइलर में कुछ तंत्र (आमतौर पर कंपाइलर विशिष्ट) होगा जो इसे हार्डवेयर रजिस्टरों तक पहुंचने की अनुमति देता है जो या तो डिवाइस के भीतर या बाहरी मेमोरी या आईओ मैप किए गए डिवाइस में सीरियल पोर्ट फ़ंक्शन को लागू करने के लिए उपयोग किए जाते हैं। ये पंजीकरण परिभाषा अक्सर उपकरण या प्रोसेसर निर्माता द्वारा प्रदान की जाती है और यह केवल ऑपरेटिंग मोड को सेट करने के लिए सीरियल पोर्ट रजिस्टरों को कॉन्फ़िगरेशन नियंत्रण मान लिखने का एक मामला है और फिर डेटा को टीजेई प्राप्त करने के लिए बफर रजिस्टर प्राप्त होता है।

सरल लगता है लेकिन, एमएसपी -430 मेलिंग सूची पर यूएसएआर प्रोग्रामिंग प्रश्न सबसे आम एकल विषय हैं।

1

इयान के उत्तर पर विस्तार करने के लिए, एक सामान्य एम्बेडेड सी कंपाइलर में एक कंपाइलर निर्देश या एक कथन होगा जिसका पैरामीटर बॉड दर जैसी सेटिंग्स को नियंत्रित करता है, और जो स्ट्रीम के साथ यूएआरटी (या अन्य I/O हार्डवेयर) को जोड़ता है। आप एक स्ट्रीम नाम निर्दिष्ट कर सकते हैं (यदि आपके पास एक से अधिक धारावाहिक पोर्ट हैं) या डिफ़ॉल्ट का उपयोग करें। फिर आप सामान्य सी चरित्र दिनचर्या के साथ धारावाहिक बंदरगाह तक पहुंच सकते हैं, और प्रत्येक चरित्र प्राप्त होने पर एक बाधा उत्पन्न होगी। तो आपका इंटरप्ट रूटीन प्रत्येक चरित्र को पढ़ता है और इसे एक बफर में रखता है।