RS-232 для Linux и WIN32 не может получать данные в Linux - PullRequest
1 голос
/ 03 сентября 2010

Я пытаюсь получить символы с доски Arduino в Linux, но эта библиотека не возвращает символов.Код:

#include "rs232.h"
#include <time.h>
#include <stdio.h>


void main() {
    int res = OpenComport(16, 9600);
    printf("Open port result: %d\n\n\n", res);
    unsigned char *buf;

    while(1) {
        int n = PollComport(16, buf, 255);
        printf("n: %d\n", n);
        sleep(1);   
    }

    CloseComport(16);
}

1 Ответ

1 голос
/ 03 сентября 2010

Более серьезно, вы никогда не выделяли память для хранения символов.Если они получены, они будут записаны в произвольном месте в памяти, идентифицируемом неинициализированным значением переменной buf.

Вы, вероятно, хотите что-то более похожее на

int main(int argc, char **argv) {
    char buf[256];
    int res = OpenComport(16, 9600);

    printf("Open port result: %d\n\n\n", res);
    while(1) {
        int n = PollComport(16, buf, sizeof(buf)-1);
        printf("n: %d\n", n);
        sleep(1);   
    }
    CloseComport(16);
}

Есть пара других гнид.Во-первых, для размещенной программы принято использовать полную подпись main().Это облегчает получение аргументов командной строки и сообщает об успехе или неудаче оболочке.Это всего лишь отброс, так что здесь это менее важно.Во-вторых, вы объявили переменную buf в месте, которое является допустимым C99, но не допустимым C89.Большой объем кода по-прежнему C89, и вы должны быть осторожны при выборе среды C99.Примечательно, что компиляторы Microsoft не спешат идти в ногу со стандартами.Вы не можете выбрать последовательный порт, связав ссылку на ttyUSB0 с кодом 16. Это может быть проблемой в Windows.

Я также заметил, что эта библиотека довольно тиха с другойвиды конфигурации, которые можно выполнить на последовательном порту.Позволяет указать скорость передачи, но не ширину байта или четность.Моя настоящая обеспокоенность заключается в том, что в нем не упоминается аппаратное или программное рукопожатие, и, например, COM-порты Windows обычно по умолчанию предполагают, что будет использоваться аппаратное рукопожатие.Я не знаю, каким образом рукопожатие и другие конфигурации, которые по умолчанию linux ttys, но будут значения по умолчанию.IIRC, платы Arduino (как и большинство встраиваемых систем) не беспокоятся о проводах аппаратного рукопожатия, поэтому в этом может быть вся причина.

Вот некоторые вещи, которые следует попробовать:

  • Можете ли вы поговорить с платой с Hyperterm в Windows или с эмулятором терминала в Linux?
  • Какие настройки вы использовали?
  • Программа начинает работать после разговора с платой с эмулятором терминала?

Редактировать: Пропустить тег "linux" при первом чтении, поэтому яотредактировал его, чтобы смягчить предположение, что операционная система Windows доступна.Несмотря на то, что все подробности о последовательных портах различаются для двух платформ, необходимость полной конфигурации для соответствия другому концу провода остается неизменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...