مشكلة مع القراءة من الملف واصف

D

DCO_81

Guest
مرحبا جميعا ،

لقد بعض المتاعب مع هذا الرمز.حصلت من هذا "المسلسل دليل البرمجة لنظم التشغيل posix".ولكن هذا لا يعمل -- المخزن هو دائما فارغة.أين هو خطأي؟ليس لدي علاج.

رمز :استجابة كثافة العمليات ()

(

nbytes كثافة العمليات ؛

تشار * bufptr ؛

العازلة تشار [255] ؛الكتابة (فد ، "في \ ص" ، 3) ؛النوم (1) ؛bufptr = العازلة ؛في حين أن ((nbytes = قراءة (فد ، bufptr ، عازلة sizeof (منطقة عازلة) -- bufptr -- 1))> 0)

(

bufptr = nbytes ؛

إذا كان (bufptr [-1] == '\ ن' | | bufptr [-1] = '\ ص')

كسر ؛

)* bufptr = '\ 0' ؛محكمة <<العازلة <<endl ؛ / / العازلة فارغة!
-- لماذا؟!؟إذا كان (strncmp (العازلة ، "موافق" ، 2))

عودة 0 ؛عودة -1 ؛

)

 
Rozwój nowoczesnych technologii sprawia, że coraz więcej czasu spędzamy w internecie. Nie tylko w ramach przyjemności i spędzania wolnego czasu, ale także obowiązków związanych z pracą zawodową - coraz więcej osób nie jest w stanie wyobrazić sobie wypełniania swoich codziennych obowiązków bez dostępu do komputera, smartfona, a przede wszystkim Internetu. Jakie zagrożenia się z tym wiążą? Na co należy uważać, czego nie robić i jakie środki przedsięwziąć?

Read more...
 
عندما تقرأ من المنفذ التسلسلي ، يمكنك الحصول على كل بايت في المخزن المؤقت الإدخال.ولكن منذ جهاز كمبيوتر سريعة ، قد لا يكون هناك وجود بايت

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="غمزة" border="0" />

.

أعتقد أن الأنظمة الخاصة بك يرسل شيئا أكثر من منفذ تسلسلي ، ويحاول الحصول على الإجابة.ولكن منذ الكمبيوتر سريعة جدا ، ليست هناك معلومات متاحة في ذلك الوقت للتدقيق

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="غمزة" border="0" />

.

ربما يجب عليك القيام به بعض الإعدادات لجعل عملية القراءة تسد؟
fcntl (فد ، F_SETFL ، 0) ؛
(ولكن هذا يجب أن يكون الإعداد الافتراضي إلا إذا قمت بفتح منفذ تسلسلي مع خيار رفع الحظر)

ولكن بعد ذلك هناك مشكلة اخرى ان يبقي لكم البرنامج توقف حتى يتم تلقي بايت

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="غمزة" border="0" />

.لذا يجب عليك القفز من حلقة
، بينما عندما تحصل على البيانات أو تحديد مهلة.

ربما يجب عليك قراءة الجزء حول وحدد نظام المكالمات!
http://www.easysw.com/ ~ مايك / المسلسل / serial.html # 5_2_1

Antharax

 
بفضل Antharax ،

إجابة سريعة مثلما هو الحال دائما.

عندما كنت تهيئة المودم يمكنني استخدام fcntl (فد ، F_SETFL ، 0) ؛ صريحة.ولهذا يجب ألا يكون مشكلة.
منذ تقريري البرنامج لم يكن أبدا في حين حلقة ، أنا لم مشاكل بعد الخروج منه

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="غمزة" border="0" />للقراءة تستغرق العملية 2-3 ثوان ، لذلك اعتقد انه عرقلة واحدة.Unfortunatley مشكلتي لم تحل بعد.أي اقتراحات أخرى؟

 
حسنا ، أنا أرى.
ثم هناك 2 الاحتمالات :
إمكانية 1 :
كنت انتظر البيانات ولكن لا توجد أية بيانات القادمة!
ويتم حظر قراءة مع مهلة :
رمز :

options.c_cc [VTIME] = 10 ؛ / / معنى 1 ثانية
 
مرحبا ،

أعتقد أنني يمكن أن تكون على يقين من أن هذا البرنامج لم يستخدم في الحلقة.أنا وضعت عدة "المحكمة" ليالي في حلقة الجسم وليس هناك ما هو مطبوع (كنت "endl" ، لذلك يجب أن يتم مسح عازلة).الباود تم بالفعل تعيين إلى 9600 باستخدام B9600.أنا استخدم خيار الاندماج الذي البطاقة هي بطاقة كومبو (جي إس إم ، جي بي اس ، umts).أنا 2 جهاز كمبيوتر متصل عبر اتصال البيانات جرام.فإنه لا يزال لا يعمل.
لملاحظتك : أي اقتراحات ما ينبغي أن يكتب بدلا من bufptr [-1]؟

يرجع الفضل في ذلك مسبقا.

 
اقتباس :

أي اقتراحات ما ينبغي أن يكتب بدلا من bufptr [-1]؟
 
عند تشغيل برنامج بلدي ، أستطيع أن أرى الردود من المعرضين للأوامر في مينيكوم (محطة البرنامج).عندما أرسل إلى الجواب هو موافق المستقبلة.لقد طبع طول nbytes قبل وهذا هو بالتأكيد 0.ولكن يمكنني أيضا أن تحاول ذلك مع كابل nulmodem الآن.وأضاف بعد 49 دقيقة :هذا

رمز :محكمة <<عرافة <<(كثافة العمليات) العازلة <<endl ؛

محكمة <<العازلة <<endl ؛

 
آسف ، وارتكب خطأ ، يجب عليك أن تكتب

محكمة <<عرافة <<(المترجم) (* العازلة) <<endl ؛
(أنا غير مهتم في عنوان العازلة ، وفقط في قيمة

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="غمزة" border="0" />

)

ونعم ، لأنها تساعد!

وهذا يعني أن تتلقى العودة cariage ( '\ ن') والخروج من حلقة حين.

بعد الغداء أنا سوف أكتب لك وسريعة الروتينية التي تساعدكAntharax

 
وجبة شهية.

الآن يبدو أن هذا الرد :

0
-- سطر فارغ --
ffffffff

 
أنت يمكن أن تجرب هذا الرجاء؟

رمز :

تعريف # BUFFERSIZE 256استجابة كثافة العمليات ()

(

كثافة العمليات ط ؛

nbytes كثافة العمليات ؛

غير الموقعة writePos كثافة العمليات = 0 ؛

استجابة تشار [BUFFERSIZE] ؛الكتابة (فد ، "في \ x0D \ x0a" ، 4) ؛النوم (1) ؛في حين أن ((nbytes = قراءة (فد ، واستجابة [writePos] ، BUFFERSIZE -- readPos))> 0)

(

ل(writePos = ط ؛ ط <writePos nbytes ؛ ط )

محكمة << "بايت وردت :" <<عرافة <<(المترجم) استجابة [ط] <<endl ؛writePos = nbytes ؛

إذا كان (writePos> = BUFFERSIZE)

كسر ؛

/ / ربما تتلقى "\ x0D \ x0AOK \ x0D \ x0a"

اذا كان ((writePos> 2) & & (استجابة [writePos - 1] == 0x0A))

كسر ؛

)محكمة <<رد <<endl ؛إذا كان (strncmp (ردا على ذلك ، "\ x0D \ x0AOK \ x0D \ x0a" ، 6))

عودة 0 ؛عودة -1 ؛

)
 
أنك لم تحدد readPos قبل استخدامها في قراءة وظيفة (فد readPos ،...،).هل هو initialised مع 0؟وأضاف بعد 9 دقائق :ليس لدي علاج ما فعلت ، ولكن هذا الرمز لا يعملون!أين هي الحيلة؟شكرا جزيلا!

 
إذا لم أكن على خطأ استجابة موافق يجب أن يسبقه ويليه <LF><CR>تقوم بالتدقيق في بلدكم لهذه الحلقة والخروج بسبب التواجد الأول من السجل التجاري المجلة rraither من الماضي.ولذلك كتب Antharax
writePos> 2 لمنع أشياء يمكن تشغيلها من التواجد الأول.

 
مرحبا مرة أخرى ،

أعتقد أنني كان قليلا لبتهور مع دواعي سروري.

عودة لديك وظيفة هو 0 -- ممتاز!
ولكن لم يعمل البرنامج في حلقة الجسم.
محكمة <<رد <<endl ؛ تطبع هذا :
h_ ش @ @ @
ولكن لا strncmp العمل.

 
حقا
وBUFFERSIZE -- readPos
يجب أن يكون BUFFERSIZE -- writePos
(آسف ، لم تجمع الشيء

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="غمزة" border="0" />

)

كما أنني نسيت أن ينهي استجابة لاغية بعد الخروج من الحلقة في حين!
استجابة [writePos] = 0 ؛

وآمل أن يساعد قليلا.
ربما تستطيع استخدام مصحح وتعيين نقطة توقف على خط الطباعة خارج المخزن؟
أو هل يمكن استخدامرمز :

printf (الاستجابة)
 
مرحبا ،

إضافة التغييرات الآن ، ولكن ما زال البرنامج لا يعمل في الحلقة.حتى عندما strncmp على جانبه ، سيقارن في ميدان شار فارغة.

هذا البيان يجب أن يكون حسنا؟

ل((nbytes = قراءة (فد ، واستجابة [writePos] ، BUFFERSIZE -- writePos))> 0)

 
في حين يحل محل / للا يساعد.انها غريبة جدا ، ولكن بمجرد أن أحصل على "بايت receiced" :
41 ، 54 ، د ، د ، أ ، 4f ، 4b ، د ، عرافة ()
--> أ ، ر ، <CR>، <CR>، <LF>، سين ، كاف ، <CR>، <LF>

هنا هو رمز للUART (انها في منشئ) :

رمز :المسلسل : : المسلسل (تشار * device_name)

(

فد فتح = (device_name ، O_RDWR | O_NOCTTY | O_NDELAY) ؛

إذا كان (فد <0)

(

خروج (1) ؛

)fcntl (فد ، F_SETFL ، 0) ؛tcgetattr (فد ، وold_settings) ؛bzero (& new_settings ، sizeof (new_settings) ؛new_settings.c_cflag | = (CLOCAL | CREAD) ؛

new_settings.c_lflag & = ~ (ICANON | إيكو | ECHOE | ISIG) ؛

new_settings.c_oflag & = ~ OPOST ؛

new_settings.c_cc [VMIN] = 0 ؛

new_settings.c_cc [VTIME] = 50 ؛cfsetspeed (& new_settings ، B9600) ؛tcflush (فد ، TCIFLUSH) ؛tcsetattr (فد ، TCSANOW ، وnew_settings) ؛

)
 
<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="ابتسامة" border="0" />
 
مرحبا مرة أخرى ،

يعمل البرنامج مع غرامة بلدي الانصهار الخيار جرام - محول بطاقه.ولكن عندما أحاول استخدامه مع سيمنس مولودية 45T على ttyS0 أنها لن تنجح.التهيئة الجيد الذي قام به وأستطيع أن أرسل أوامر.ولكن عندما يتعلق الأمر

رمز :في حين أن ((nbytes = قراءة (فد ، واستجابة [writePos] ، BUFFERSIZE -- readPos))> 0)
 

Welcome to EDABoard.com

Sponsor

Back
Top