From 99e9829768e88374ca791bd75eed40f78573b7c1 Mon Sep 17 00:00:00 2001 From: tianjialong Date: Mon, 17 Apr 2023 14:57:18 +0800 Subject: [PATCH] update --- .clang-format | 9 ---- .vscode/settings.json | 6 --- README.md | 2 +- a.out | Bin 13144 -> 0 bytes c/.clang-format | 9 ++++ c/.vscode/settings.json | 6 +++ c/a.out | Bin 0 -> 13144 bytes c/main.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++ cpp/.clang-format | 9 ++++ cpp/.vscode/settings.json | 6 +++ cpp/main.cpp | 0 main.c | 135 ---------------------------------------------- 12 files changed, 166 insertions(+), 151 deletions(-) delete mode 100644 .clang-format delete mode 100644 .vscode/settings.json delete mode 100755 a.out create mode 100644 c/.clang-format create mode 100644 c/.vscode/settings.json create mode 100644 c/a.out create mode 100644 c/main.c create mode 100644 cpp/.clang-format create mode 100644 cpp/.vscode/settings.json create mode 100644 cpp/main.cpp delete mode 100644 main.c diff --git a/.clang-format b/.clang-format deleted file mode 100644 index 271b561..0000000 --- a/.clang-format +++ /dev/null @@ -1,9 +0,0 @@ -# Defines the Chromium style for automatic reformatting. -# http://clang.llvm.org/docs/ClangFormatStyleOptions.html -Language: Cpp -BasedOnStyle: Google -ColumnLimit: 120 -AlignConsecutiveMacros: true -AlignConsecutiveDeclarations: true -AlignConsecutiveAssignments: true -AlignOperands: true \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 594da2f..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "files.associations": { - "strings.h": "c", - "stat.h": "c" - } -} \ No newline at end of file diff --git a/README.md b/README.md index e845566..7e59600 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -README +# README diff --git a/a.out b/a.out deleted file mode 100755 index 3f97040eca9ce1227cbac12582fbee38e0e97ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13144 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +typedef struct termios termios_t; + +typedef struct serial_data { + char databuf[100]; // 发送/接受数据 + int serfd; // 串口文件描述符 + +} ser_Data; + +void *sersend(void *arg); +void *serrecv(void *arg); + +int main(int argc, char *argv[]) { + pthread_t pid1, pid2; + pthread_attr_t *pthread_arr1, *pthread_arr2; + pthread_arr1 = NULL; + pthread_arr2 = NULL; + int serport1fd; + + /* 进行串口参数设置 */ + termios_t *ter_s = malloc(sizeof(*ter_s)); + + serport1fd = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY); // 不成为控制终端程序,不受其他程序输出输出影响 + if (serport1fd < 0) { + printf("%s open faild\r\n", argv[1]); + return -1; + } + + bzero(ter_s, sizeof(*ter_s)); + + ter_s->c_cflag |= CLOCAL | CREAD; // 激活本地连接与接受使能 + + ter_s->c_cflag &= ~CSIZE; // 失能数据位屏蔽 + ter_s->c_cflag |= CS8; // 8位数据位 + + ter_s->c_cflag &= ~CSTOPB; // 1位停止位 + + ter_s->c_cflag &= ~PARENB; // 无校验位 + + ter_s->c_cc[VTIME] = 0; + ter_s->c_cc[VMIN] = 0; + + /*1 VMIN> 0 && VTIME> 0 + VMIN为最少读取的字符数,当读取到一个字符后,会启动一个定时器,在定时器超时事前,如果已经读取到了VMIN个字符,则read返回VMIN个字符。如果在接收到VMIN个字符之前,定时器已经超时,则read返回已读取到的字符,注意这个定时器会在每次读取到一个字符后重新启用,即重新开始计时,而且是读取到第一个字节后才启用,也就是说超时的情况下,至少读取到一个字节数据。 + 2 VMIN > 0 && VTIME== 0 + 在只有读取到VMIN个字符时,read才返回,可能造成read被永久阻塞。 + 3 VMIN == 0 && VTIME> 0 + 和第一种情况稍有不同,在接收到一个字节时或者定时器超时时,read返回。如果是超时这种情况,read返回值是0。 + 4 VMIN == 0 && VTIME== 0 + 这种情况下read总是立即就返回,即不会被阻塞。----by 解释粘贴自博客园 + */ + cfsetispeed(ter_s, B115200); // 设置输入波特率 + cfsetospeed(ter_s, B115200); // 设置输出波特率 + + tcflush(serport1fd, TCIFLUSH); // 刷清未处理的输入和/或输出 + + if (tcsetattr(serport1fd, TCSANOW, ter_s) != 0) { + printf("com set error!\r\n"); + } + + char buffer[] = {"hello my world!\r\n"}; + char recvbuf[100] = {}; + + ser_Data snd_data; + ser_Data rec_data; + + snd_data.serfd = serport1fd; + rec_data.serfd = serport1fd; + + memcpy(snd_data.databuf, buffer, strlen(buffer)); // 拷贝发送数据 + + pthread_create(&pid1, pthread_arr1, sersend, (void *)&snd_data); + pthread_create(&pid2, pthread_arr2, serrecv, (void *)&rec_data); + + ssize_t sizec; + while (1) { + usleep(100000); + } + + pthread_join(pid1, NULL); + pthread_join(pid2, NULL); + free(ter_s); + return 0; +} + +void *sersend(void *arg) // 串口发送线程函数 +{ + ser_Data *snd = (ser_Data *)arg; + int ret; + while (1) { + ret = write(snd->serfd, snd->databuf, strlen(snd->databuf)); + if (ret > 0) { + printf("send success, data is %s\r\n", snd->databuf); + } else { + printf("send error!\r\n"); + } + usleep(300000); + /* + if(发生中断) + break;//退出 + */ + } +} + +void *serrecv(void *arg) // 串口发送线程函数 +{ + ser_Data *rec = (ser_Data *)arg; + int ret; + while (1) { + ret = read(rec->serfd, rec->databuf, 1024); + if (ret > 0) { + printf("recv success,recv size is %d,data is %s\r\n", ret, rec->databuf); + } else { + /* + 什么也不做 + */ + } + usleep(1000); + /* + if(发生中断) + break;//退出 + */ + } +} diff --git a/cpp/.clang-format b/cpp/.clang-format new file mode 100644 index 0000000..271b561 --- /dev/null +++ b/cpp/.clang-format @@ -0,0 +1,9 @@ +# Defines the Chromium style for automatic reformatting. +# http://clang.llvm.org/docs/ClangFormatStyleOptions.html +Language: Cpp +BasedOnStyle: Google +ColumnLimit: 120 +AlignConsecutiveMacros: true +AlignConsecutiveDeclarations: true +AlignConsecutiveAssignments: true +AlignOperands: true \ No newline at end of file diff --git a/cpp/.vscode/settings.json b/cpp/.vscode/settings.json new file mode 100644 index 0000000..594da2f --- /dev/null +++ b/cpp/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "strings.h": "c", + "stat.h": "c" + } +} \ No newline at end of file diff --git a/cpp/main.cpp b/cpp/main.cpp new file mode 100644 index 0000000..e69de29 diff --git a/main.c b/main.c deleted file mode 100644 index 7a67e69..0000000 --- a/main.c +++ /dev/null @@ -1,135 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -typedef struct termios termios_t; - -typedef struct serial_data { - char databuf[100]; // 发送/接受数据 - int serfd; // 串口文件描述符 - -} ser_Data; - -void *sersend(void *arg); -void *serrecv(void *arg); - -int main(int argc, char *argv[]) { - pthread_t pid1, pid2; - pthread_attr_t *pthread_arr1, *pthread_arr2; - pthread_arr1 = NULL; - pthread_arr2 = NULL; - int serport1fd; - - /* 进行串口参数设置 */ - termios_t *ter_s = malloc(sizeof(*ter_s)); - - serport1fd = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY); // 不成为控制终端程序,不受其他程序输出输出影响 - if (serport1fd < 0) { - printf("%s open faild\r\n", argv[1]); - return -1; - } - - bzero(ter_s, sizeof(*ter_s)); - - ter_s->c_cflag |= CLOCAL | CREAD; // 激活本地连接与接受使能 - - ter_s->c_cflag &= ~CSIZE; // 失能数据位屏蔽 - ter_s->c_cflag |= CS8; // 8位数据位 - - ter_s->c_cflag &= ~CSTOPB; // 1位停止位 - - ter_s->c_cflag &= ~PARENB; // 无校验位 - - ter_s->c_cc[VTIME] = 0; - ter_s->c_cc[VMIN] = 0; - - /*1 VMIN> 0 && VTIME> 0 - VMIN为最少读取的字符数,当读取到一个字符后,会启动一个定时器,在定时器超时事前,如果已经读取到了VMIN个字符,则read返回VMIN个字符。如果在接收到VMIN个字符之前,定时器已经超时,则read返回已读取到的字符,注意这个定时器会在每次读取到一个字符后重新启用,即重新开始计时,而且是读取到第一个字节后才启用,也就是说超时的情况下,至少读取到一个字节数据。 - 2 VMIN > 0 && VTIME== 0 - 在只有读取到VMIN个字符时,read才返回,可能造成read被永久阻塞。 - 3 VMIN == 0 && VTIME> 0 - 和第一种情况稍有不同,在接收到一个字节时或者定时器超时时,read返回。如果是超时这种情况,read返回值是0。 - 4 VMIN == 0 && VTIME== 0 - 这种情况下read总是立即就返回,即不会被阻塞。----by 解释粘贴自博客园 - */ - cfsetispeed(ter_s, B115200); // 设置输入波特率 - cfsetospeed(ter_s, B115200); // 设置输出波特率 - - tcflush(serport1fd, TCIFLUSH); // 刷清未处理的输入和/或输出 - - if (tcsetattr(serport1fd, TCSANOW, ter_s) != 0) { - printf("com set error!\r\n"); - } - - char buffer[] = {"hello my world!\r\n"}; - char recvbuf[100] = {}; - - ser_Data snd_data; - ser_Data rec_data; - - snd_data.serfd = serport1fd; - rec_data.serfd = serport1fd; - - memcpy(snd_data.databuf, buffer, strlen(buffer)); // 拷贝发送数据 - - pthread_create(&pid1, pthread_arr1, sersend, (void *)&snd_data); - pthread_create(&pid2, pthread_arr2, serrecv, (void *)&rec_data); - - ssize_t sizec; - while (1) { - usleep(100000); - } - - pthread_join(pid1, NULL); - pthread_join(pid2, NULL); - free(ter_s); - return 0; -} - -void *sersend(void *arg) // 串口发送线程函数 -{ - ser_Data *snd = (ser_Data *)arg; - int ret; - while (1) { - ret = write(snd->serfd, snd->databuf, strlen(snd->databuf)); - if (ret > 0) { - printf("send success, data is %s\r\n", snd->databuf); - } else { - printf("send error!\r\n"); - } - usleep(300000); - /* - if(发生中断) - break;//退出 - */ - } -} - -void *serrecv(void *arg) // 串口发送线程函数 -{ - ser_Data *rec = (ser_Data *)arg; - int ret; - while (1) { - ret = read(rec->serfd, rec->databuf, 1024); - if (ret > 0) { - printf("recv success,recv size is %d,data is %s\r\n", ret, rec->databuf); - } else { - /* - 什么也不做 - */ - } - usleep(1000); - /* - if(发生中断) - break;//退出 - */ - } -}