From d70f4396b425bea8ad313419c24860fdac295408 Mon Sep 17 00:00:00 2001 From: tianjialong Date: Mon, 17 Apr 2023 16:18:34 +0800 Subject: [PATCH] update --- .vscode/settings.json | 10 ++++ c/a.out | Bin 13144 -> 13144 bytes c/main.c | 14 +++-- cpp/.vscode/settings.json | 6 -- cpp/a.out | Bin 0 -> 14272 bytes cpp/main.cpp | 136 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 155 insertions(+), 11 deletions(-) create mode 100644 .vscode/settings.json mode change 100644 => 100755 c/a.out delete mode 100644 cpp/.vscode/settings.json create mode 100755 cpp/a.out diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..37cb76e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "files.associations": { + "malloc.h": "c", + "types.h": "c", + "stdlib.h": "c", + "sstream": "cpp", + "ostream": "cpp", + "iostream": "cpp" + } +} \ No newline at end of file diff --git a/c/a.out b/c/a.out old mode 100644 new mode 100755 index 3f97040eca9ce1227cbac12582fbee38e0e97ea1..c8bd3ef6d1b278961d68aefe5dd0b0114f59d2ca GIT binary patch delta 742 zcmZ`%Z%9*76ushmPduhO8cwk0WHJhEuZEGD>B5WsC1)nJfLjHSLjZKEh*SQtmsuEvJ%Ll~M)F zNFmz)DM{?HOzOA}(n~c9+xcp)xCn=MFBPGO_qp7Qnl^eZO^Hf=Y1(W-J&c9%F=(={ ztBV$OQ6m1L@#9155>}N;xqh zw#PEwBlbFyV3{pC?iZz{R_SNV|C#lDHM3_+26Y0S*gyGe<~8jyN;jk9W5gYZNyOdg z`xeoQM^```gmFiho16zuXrjH)EHt)sq1246)u_Rb4qV63VjAy=h;|{(?c&P~?>U>v zOx9!R94FutX(Jve0R0+r&9_SikCmnFzd#ft4^4g3m-P1Ug-hB#3eHZAo tlK17zbSsPm0+!GUH3V~kuw_*kf#zV?^6#;p2!<;Jq2z|6JqX_9{s3Y-56J)k delta 672 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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 *ter_s = (termios *)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 = { + .databuf = {0}, + .serfd = serport1fd, + }; + ser_Data rec_data = { + .databuf = {0}, + .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); + + 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;//退出 + */ + } +}