Более серьезно, вы никогда не выделяли память для хранения символов.Если они получены, они будут записаны в произвольном месте в памяти, идентифицируемом неинициализированным значением переменной 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 доступна.Несмотря на то, что все подробности о последовательных портах различаются для двух платформ, необходимость полной конфигурации для соответствия другому концу провода остается неизменной.