C++ المنفذ التسلسلي فقط الاستجابة مرة واحدة باستخدام الكتابة()
-
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
عدد إرجاعها بواسطة الدالة سوف اقول لكم كم كانت قراءة الواقع.