C++ المنفذ التسلسلي فقط الاستجابة مرة واحدة باستخدام الكتابة()

StackOverflow https://stackoverflow.com/questions/1609127

  •  05-07-2019
  •  | 
  •  

سؤال

كافة التعليمات البرمجية أدناه يعمل.الجهاز يستجيب ، ج ، 7 هو إعادة تعيين.عند تشغيل هذه المرة الثانية فإنه لا يستجيب.إذا كنت يدويا تشغيل الجهاز وإعادة تشغيله ، ثم تشغيل هذا البرنامج النصي مرة أخرى يعمل.ولكن ليس إذا كنت اضغط على زر تشغيل البرنامج النصي في المرة الثانية.

RS232:57600,8 ، ن ، 1

أي أفكار؟?هل هناك أي مزيد من المعلومات اللازمة لحل هذا ؟

*أيضا عندما أحصل على هذا العمل انا ذاهب الى استخدام قراءة() وظيفة للحصول على الأجهزة الردود.لا أحد يعرف بالشكل الصحيح أنا بحاجة إلى استخدام استنادا إلى أدناه الرمز ؟ آسف أنا جديد على C++...أنا أكثر من PHP الرجل.

*أنا أيضا لا أعرف إذا 1024 هو الحق, ولكن يبدو ان تعمل ايه...

#include <termios.h>

int fd;
struct termios options;
fd=open("/dev/tty.KeySerial1", O_RDWR | O_NOCTTY | O_NDELAY);
fcntl(fd, F_SETFL, 0);
tcgetattr(fd,&options);
options.c_ispeed=57600;
options.c_ospeed=57600;
options.c_cflag |= (CLOCAL | CREAD);
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_cflag &= ~CSTOPB;
options.c_lflag &= ~ECHO;
options.c_oflag &= ~ECHO;
options.c_oflag &= ~OPOST;
options.c_cflag |= CS8;
options.c_cflag |= CRTSCTS;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] =10;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&options);

write(fd, "C,7\r\n", 1024);

close(fd);
هل كانت مفيدة؟

المحلول

1024 في الواقع قد يكون لديك مشكلة.الثالث paramter إلى write() وظيفة يشير إلى عدد وحدات البايت إلى أن تكون مكتوبة:

ssize_t write(int fildes, const void *buf, size_t nbyte);

ترى الرجل صفحة كتابة() للحصول على التفاصيل.

في الحالة الخاصة بك ، يجب أن يكون عدد 5 ، حيث تقوم بإرسال 5 أحرف ('C' ',' '7' ' ' و ' ').

من خلال توفير قيمة 1024, كنت في الواقع إرسال آخر 1019 أحرف البيانات المهملة على قناة مسلسل.

تحديث:

على read() وظيفة لديها تقريبا نفس الحجج:

ssize_t read(int fildes, void *buf, size_t nbyte);

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

char someData[12];
read(fd, someData, 12);

أنا لست متأكدا تماما كيفية تحديد عدد الأحرف التي تحتاج إلى قراءة ، ولكن ssize_t عدد إرجاعها بواسطة الدالة سوف اقول لكم كم كانت قراءة الواقع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top