Написал небольшую тестовую программку для ARM9. На нем крутится linux. Программа должна в последовательный порт писать одно число 0x0A(LF). Вместо этого я осциллографом вижу что передаются вместо 0x0A - два символа в следующей последовательности 0x0D(CR) затем 0x0A(LF). Как написать программу чтобы компилятор понял что я хочу только передать 0x0A?
Если например передавать 0x0B, то осциллографом видно что только 0x0B и передается.
Код программы:
CODE
#include <stdio.h> /* Стандартные объявления ввода/вывода */
#include <string.h> /* Объявления строковых функций */
#include <unistd.h> /* Объявления стандартных функций UNIX */
#include <fcntl.h> /* Объявления управления файлами */
#include <errno.h> /* Объявления кодов ошибок */
#include <termios.h> /* Объявления управления POSIX-терминалом */
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc,char **argv)
{
int fd;
fd = open("/dev/ttyS3", O_RDWR | O_NOCTTY |O_NONBLOCK);
if (fd == -1)
{
printf("Error: Port has not been opened");
}
else
{
struct termios options; /*структура для установки порта*/
tcgetattr(fd, &options); /*читает параметры порта*/
cfsetispeed(&options, B38400); /*установка скорости порта*/
cfsetospeed(&options, B38400); /*установка скорости порта*/
options.c_cflag &= ~PARENB; /*выкл проверка четности*/
options.c_cflag |= CSTOPB; /*вкл 2-х стобит*/
options.c_cflag &= ~CSIZE; /*выкл битовой маски*/
options.c_cflag |= CS8; /*вкл 8бит*/
tcsetattr(fd, TCSANOW, &options); /*сохранения параметров порта*/
}
unsigned char ModBus_write_buf[1];
ModBus_write_buf[0] = 0x0A; /*ID*/
int ModBus_write_result;
int ModBus_request;
for (ModBus_request = 0; ModBus_request < 1; ModBus_request++)
{
ModBus_write_result = write(fd, &ModBus_write_buf, 1);
if (ModBus_write_result < 0)
{
fputs("Write of bytes failed!\n", stderr);
}
else
{
printf("ModBus_write_result = %d \n",ModBus_write_result) ;
}
}
close(fd);
return(0);
}
#include <string.h> /* Объявления строковых функций */
#include <unistd.h> /* Объявления стандартных функций UNIX */
#include <fcntl.h> /* Объявления управления файлами */
#include <errno.h> /* Объявления кодов ошибок */
#include <termios.h> /* Объявления управления POSIX-терминалом */
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc,char **argv)
{
int fd;
fd = open("/dev/ttyS3", O_RDWR | O_NOCTTY |O_NONBLOCK);
if (fd == -1)
{
printf("Error: Port has not been opened");
}
else
{
struct termios options; /*структура для установки порта*/
tcgetattr(fd, &options); /*читает параметры порта*/
cfsetispeed(&options, B38400); /*установка скорости порта*/
cfsetospeed(&options, B38400); /*установка скорости порта*/
options.c_cflag &= ~PARENB; /*выкл проверка четности*/
options.c_cflag |= CSTOPB; /*вкл 2-х стобит*/
options.c_cflag &= ~CSIZE; /*выкл битовой маски*/
options.c_cflag |= CS8; /*вкл 8бит*/
tcsetattr(fd, TCSANOW, &options); /*сохранения параметров порта*/
}
unsigned char ModBus_write_buf[1];
ModBus_write_buf[0] = 0x0A; /*ID*/
int ModBus_write_result;
int ModBus_request;
for (ModBus_request = 0; ModBus_request < 1; ModBus_request++)
{
ModBus_write_result = write(fd, &ModBus_write_buf, 1);
if (ModBus_write_result < 0)
{
fputs("Write of bytes failed!\n", stderr);
}
else
{
printf("ModBus_write_result = %d \n",ModBus_write_result) ;
}
}
close(fd);
return(0);
}