当前位置: 首页 > news >正文

自助建站的优点与缺点大型网站多少钱

自助建站的优点与缺点,大型网站多少钱,便宜建网站,上海网站建设公司站霸网络串口的回顾 硬件接线 关于串口也是之前学习过很多次了#xff0c;详见#xff1a; 认识串口 和 蓝牙模块HC08_hc08蓝牙模块_mjmmm的博客-CSDN博客 串口的再认识-CSDN博客 香橙派提供了两路串口#xff0c;第一路就是在刷机时串口连接的引脚#xff08;对应驱动ttyS0 硬件接线 关于串口也是之前学习过很多次了详见 认识串口 和 蓝牙模块HC08_hc08蓝牙模块_mjmmm的博客-CSDN博客 串口的再认识-CSDN博客 香橙派提供了两路串口第一路就是在刷机时串口连接的引脚对应驱动ttyS0第二路就是物理引脚8和10对应驱动ttyS5 此处要请出老朋友CH340这次连接物理引脚8和10的第二路串口  在使用串口连接香橙派的时候使用的Mobaxterm就可以视为一个串口助手但Moba更多的是提供一个基于指令交互的平台所以串口助手的使用还是选择之前用过的AI Thinker 在实际应用中单片机作为比较简单的芯片可以去负责数据的采集然后通过串口接到相对高级的香橙派或其他芯片香橙派读取数据并进行复杂的数据分析或开发包括人工智能UI网络等在单片机中难以实现的功能同时通过串口给单片机发送各种指令。 基于wiringPI库的串口开发 关于串口的代码wiringPI库同样提供了demo代码 cp一份过来 也可以使用SourceInsight来读代码 首先发现打开默认的demo打开的是串口2的驱动所以此处要改成串口5的驱动 然后编译运行显示的就是串口助手中发来的字符的ASCII码形式 串口助手中记得勾选HEX显示发送的就是16进制的0到256 基于demo的优化 可以使用之前学习的线程相关概念来优化这个demo关于线程的知识之前也学过详见 线程_mjmmm的博客-CSDN博客 Linux线程 --- 生产者消费者模型C语言-CSDN博客 serial_wiringPI_test.c #include stdio.h #include string.h #include errno.h#include wiringPi.h #include wiringSerial.h#include pthread.h #include stdlib.hvoid *read_serial(void *arg) {char *sendbuf;sendbuf (char *)malloc(32*sizeof(char));char *p sendbuf;while(1){memset(sendbuf,\0,32*sizeof(char));fgets(sendbuf,sizeof(sendbuf),stdin);//scanf(%s,sendbuf);while(*sendbuf ! \0){serialPutchar (*((int *)arg), *sendbuf) ; //串口打印数据的函数 serialPutchar()sendbuf;}sendbuf p;}pthread_exit(NULL);}void *write_serial(void *arg) {while(1){while(serialDataAvail (*((int *)arg))){ //当串口有数据的时候进入whileprintf (%c, serialGetchar (*((int *)arg))) ; //串口接收数据的函数serialGetchar()fflush (stdout) ;}}pthread_exit(NULL); }int main () {int fd ;int ret;pthread_t read_thread;pthread_t write_thread;if ((fd serialOpen (/dev/ttyS5, 115200)) 0) //打开驱动文件配置波特率{fprintf (stderr, Unable to open serial device: %s\n, strerror (errno)) ;return 1 ;}if (wiringPiSetup () -1){fprintf (stdout, Unable to start wiringPi: %s\n, strerror (errno)) ;return 1 ;}ret pthread_create(read_thread,NULL,read_serial,(void *)fd);if(ret ! 0){printf(read_serial create error\n);return 1;}ret pthread_create(write_thread,NULL,write_serial,(void *)fd);if(ret ! 0){printf(write_serial create error\n);return 1;}pthread_join(read_thread,NULL);pthread_join(write_thread,NULL);return 0 ; } 实现效果 发送数据 接收数据 也可以一边发一边接因为经过优化接和发被封装在了不同的线程中  Linux原生串口开发  通过sourceinsight查看跳转wiringPI库实现的串口代码就会发现函数的实现并不困难所以可以尝试不使用wiringPI库自己通过Linux封装函数实现串口的通讯。 首先观察wiringPi库其对于串口最核心的就是三个函数serialOpen()serialPutchar()serialGetchar()所以我就自己写一个C文件来实现这三个函数其实所谓的自己实现就是根据sourceinsight跳转这三个函数然后删去一些我认为在使用中不必要的代码与其说是自己实现更不如说是对这三个函数进行一个删减精简化然后创建一个关于它的h文件最后在串口通讯的函数里添加这个我写的h文件使用我自己实现的这三个函数来完成串口的通讯。 步骤为编写mjm_uart_tool.c - 编写mjm_uart_tool.h - 编写serial_mjm_test.c调用mjm_uart_tool.h来实现和刚刚使用wiringPI相同的效果。 mjm_uart_tool.c: #include stdio.h #include stdlib.h #include stdint.h #include stdarg.h #include string.h #include termios.h #include unistd.h #include fcntl.h #include sys/ioctl.h #include sys/types.h #include sys/stat.h #include wiringSerial.hint myserialOpen (const char *device, const int baud) {struct termios options ;speed_t myBaud ;int status, fd ;switch (baud){case 9600: myBaud B9600 ; break ;case 115200: myBaud B115200 ; break ;}if ((fd open (device, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK)) -1)return -1 ;fcntl (fd, F_SETFL, O_RDWR) ;// Get and modify current options:tcgetattr (fd, options) ;cfmakeraw (options) ;cfsetispeed (options, myBaud) ;cfsetospeed (options, myBaud) ;options.c_cflag | (CLOCAL | CREAD) ;options.c_cflag ~PARENB ;options.c_cflag ~CSTOPB ;options.c_cflag ~CSIZE ;options.c_cflag | CS8 ;options.c_lflag ~(ICANON | ECHO | ECHOE | ISIG) ;options.c_oflag ~OPOST ;options.c_cc [VMIN] 0 ;options.c_cc [VTIME] 100 ; // Ten seconds (100 deciseconds)tcsetattr (fd, TCSANOW, options) ;ioctl (fd, TIOCMGET, status);status | TIOCM_DTR ;status | TIOCM_RTS ;ioctl (fd, TIOCMSET, status);usleep (10000) ; // 10mSreturn fd ; }void serialSendstring (const int fd, const char *s) {int ret;ret write (fd, s, strlen (s));if (ret 0)printf(Serial Puts Error\n); }int serialGetstring (const int fd, char *buffer) {int n_read;n_read read(fd, buffer,32);return n_read; }int serialDataAvail (const int fd) //用来判断串口有无数据的函数直接复制黏贴过来的 {int result ;if (ioctl (fd, FIONREAD, result) -1)return -1 ;return result ; } mjm_uart_tool.h int myserialOpen (const char *device, const int baud); void serialSendstring (const int fd, const char *s); int serialGetstring (const int fd, char *buffer); int serialDataAvail (const int fd); serial_mjm_test.c #include stdio.h #include stdlib.h #include stdint.h #include stdarg.h #include string.h #include termios.h #include unistd.h #include fcntl.h #include sys/ioctl.h #include sys/types.h #include sys/stat.h #include unistd.h #include pthread.h #include errno.h #include mjm_uart_tool.hvoid *read_serial(void *arg) {char *sendbuf;sendbuf (char *)malloc(32*sizeof(char));while(1){memset(sendbuf,\0,32*sizeof(char));fgets(sendbuf,sizeof(sendbuf),stdin);serialSendstring (*((int *)arg), sendbuf) ;}pthread_exit(NULL);}void *write_serial(void *arg) {char readbuf[32] {\0};while(1){while(serialDataAvail (*((int *)arg))){serialGetstring (*((int *)arg),readbuf) ;printf(- %s\n,readbuf);memset(readbuf,\0,32);}}pthread_exit(NULL); }int main () {int fd ;int ret;pthread_t read_thread;pthread_t write_thread;if ((fd myserialOpen (/dev/ttyS5, 115200)) 0) //打开驱动文件配置波特率{fprintf (stderr, Unable to open serial device: %s\n, strerror (errno)) ;return 1 ;}/* if (wiringPiSetup () -1){fprintf (stdout, Unable to start wiringPi: %s\n, strerror (errno)) ;return 1 ;}*/ret pthread_create(read_thread,NULL,read_serial,(void *)fd);if(ret ! 0){printf(read_serial create error\n);return 1;}ret pthread_create(write_thread,NULL,write_serial,(void *)fd);if(ret ! 0){printf(write_serial create error\n);return 1;}pthread_join(read_thread,NULL);pthread_join(write_thread,NULL);return 0 ; } 注意由于这里没有使用wiringPI库所以编译不需要使用之前的build.sh脚本直接使用gcc就可以但是要记得链线程的库 gcc serial_mjm_test.c mjm_uart_tool.c -lpthread 实现效果  发送数据 接收数据 可见此时我将serialOpen()serialPutchar()serialGetchar()替换成了自己的myserialOpen()serialSendstring()serialGetstring()还原封不动照搬了serialDataAvail函数然后实现了和刚刚类似的效果甚至还有所改进因为我实现的接收函数可以直接介绍一整个字符串所以可以在之前打印“-”用于区分但是原来的serialgetchar是一个字符一个字符接收很难实现这样的效果。
http://wiki.neutronadmin.com/news/292782/

相关文章:

  • 南通网站建设哪家好wordpress空白页面模板
  • 宝塔面板建设网站石家庄网络推广
  • 小程序网站开发是用什么语言百度惠生活商家怎么入驻
  • 吉林房地产网站开发汕头住房和城乡建设厅网站
  • 分析竞争对手的网站wordpress 首页幻灯片
  • 网站开发w亿玛酷1专注东台建设网站
  • 备案网查询化妆品北京网络seo推广公司
  • 网站源码修复铜陵58同城做网站
  • 网站可以放多少视频高校网站开发
  • 网站空间永久免费扁平式网站
  • 宣城网站优化网站商城建设合同免费下载
  • 章丘哪里做网站网站公司 模板
  • 网站建设售前一般网站的宽度
  • 长沙哪里学网站建设wordpress 清理缩略图
  • 最大的网站模板网wordpress增加内链
  • 电子商务网站开发模块流程图建网站 赚钱
  • 可以做护考题目的网站前端开发工具哪个好
  • 要建立网站和账号违法违规行为数据库和什么黑名单通联支付网络服务股份有限公司
  • 网站开发一个人可以完成吗工商网上核名系统
  • 郑州企业建站公司定制广东网站营销seo方案
  • 请教个人主页网站怎么做啊义乌兼职网站建设
  • 一个公司多个网站做优化网站推广营销技巧
  • 珠海网站定制开发设计公司名字创意
  • 做360手机网站优普通电脑怎么建设网站
  • 东莞机械网站建设网页前端开发流程
  • 服务器上发布网站哈尔滨最专业的网站建设
  • 江苏系统建站怎么用淘宝官方网站登录注册
  • 上海企业网站制作多少钱如归网络营销推广企业
  • 做盗版小说网站犯法吗高大上公司网站
  • 青岛网站建设q.479185700強企业网络需求分析