2012-04-12 11 views
5

पढ़ सकते हैं जितना तेज़ी से भरता है मैं 921600 के बॉड्रेट पर सीरियल के माध्यम से एक माइक्रोक्रोनरोलर से डेटा पढ़ रहा हूं। मैं बड़ी मात्रा में एएससीआईआई सीएसवी डेटा पढ़ रहा हूं, और चूंकि यह इतनी तेजी से आता है, बफर मिलता है भरने से पहले और बाकी सब डेटा खो जाता है इससे पहले कि मैं इसे पढ़ सकूं। मुझे पता है कि मैं बफर आकार बढ़ाने के लिए serialwin32 के लिए मैन्युअल रूप से पाइसरियल स्रोत कोड संपादित कर सकता हूं, लेकिन मैं सोच रहा था कि इसके आसपास कोई और तरीका है या नहीं?पेसरियल बफर

मैं केवल डेटा प्राप्त करने की मात्रा का अनुमान लगा सकता हूं, लेकिन यह लगभग 200kb डेटा है।

+0

क्या आप बॉड्रेट को धीमा कर सकते हैं? –

+0

नहीं, दुर्भाग्य से मेरे पास यूसी बॉड्रेट का नियंत्रण नहीं है। मैं बस ट्रांसमिशन बाइट भेज सकता हूं और डेटा प्राप्त कर सकता हूं। – Nate

उत्तर

4

पूरा कर लिया है वहाँ एक है कार्रवाई करने के लिए "बफर प्राप्त करें" स्लाइडर जो डिवाइस प्रबंधक में कॉम पोर्ट के गुण पृष्ठ से पहुंच योग्य है। यह "पोर्ट सेटिंग्स" टैब पर उन्नत बटन का पालन करके पाया जाता है।

advanced settings for com port

और जानकारी:

http://support.microsoft.com/kb/131016शीर्षक के तहत बफर

http://tldp.org/HOWTO/Serial-HOWTO-4.html प्राप्त करें शीर्षक अवरोध

यह एक या दो पायदान नीचे दस्तक की कोशिश करो के तहत।

+0

मैं इसे भी एक कोशिश दूंगा। हालांकि ऐसा लगता है कि यह सिर्फ हार्डवेयर बफर के साथ मदद करेगा, इसलिए जब मैं शायद उस बफर को भी अधिक से अधिक देख रहा हूं, मुझे पता है कि मैं पाइसरियल बफर को ओवरराइज़ कर रहा हूं, जो मुझे संबोधित करने वाली पहली चिंता है। – Nate

+1

मेरे विंडोज 7 पर, सेटिंग प्रतीत होती है: डिवाइस प्रबंधक | बंदरगाहों | कॉमन | गुण | पोर्ट सेटिंग्स | उन्नत | (बाइट) प्राप्त करें।यह एक ड्रॉप-डाउन सूची है और मैं पहले से ही अधिकतम 4096 पर हूं। मेरा बफर लगभग 2K तक सीमित है। –

+0

आपकी सेटिंग्स @jon द्वारा प्रदान की गई छवि की तरह क्यों नहीं दिखती है क्योंकि यह माइक्रोसॉफ्ट पेज ** विंडोज 95 पर लागू होता है ** – krb686

4

क्या आपने डेटा भेजने के लिए यूसी को आदेश भेजने के लिए पूर्व चला रहे एक अलग थ्रेड में सीरियल इंटरफ़ेस से पढ़ना माना है?

यह लिखने के आदेश के बाद कुछ देरी को हटा देगा और पढ़ना शुरू कर देगा। other SO users हैं जिन्होंने इस विधि के साथ सफलता प्राप्त की है, उन्हें बताया गया है कि वे बफर ओवररन्स नहीं कर रहे थे।

यदि यह स्पष्ट नहीं है तो मुझे बताएं और मैं इसे दिखाने के लिए एक साथ फेंक सकता हूं।

संपादित

, थोड़ा और इसके बारे में सोच रही थी आप बफर से पढ़ सकते हैं और यहां तक ​​कि स्टैंडअलोन धागा फाइल सिस्टम के लिए इसे बाहर लिखने के लिए आपको बचा नहीं सकता कोशिश कर रहे हैं। प्रसंस्करण समय आप पढ़ने के लिए एक समय serial.Read(size=100) पर कहते हैं कि 100 बाइट्स की सोच सकते हैं कम करने के लिए और एक पंक्ति में है कि सूचना भेजे यह सब के बाद हस्तांतरण

छद्म कोड उदाहरण

def thread_main_loop(myserialobj, data_queue): 
    data_queue.put_no_wait(myserialobj.Read(size=100)) 

def process_queue_when_done(data_queue): 
    while(1): 
     if len(data_queue) > 0: 
      poped_data = data_queue.get_no_wait() 
      # Process the data as needed 
     else: 
      break; 
+0

मैं इसे एक कोशिश दूंगा, हालांकि थोड़ा गणित करने के बाद, मुझे अभी भी पता नहीं है कि इससे मदद मिलेगी या नहीं। वर्तमान में बफर 0.03 सेकंड में ओवररन हो जाएगा। और उस पर शीर्ष पर, मैं काफी हद तक निश्चित हूं कि धारा अधिसूचना का कोई अंत नहीं है। होमब्रू हार्डवेयर की खुशी। – Nate

+0

@Nate यह बहुत तेज़ है .... इसे तेज करने के अतिरिक्त तरीकों के लिए मेरा संपादन देखें। –

संबंधित मुद्दे