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

做电商网站的公司简介服务营销案例100例

做电商网站的公司简介,服务营销案例100例,营销策划公司简介范文,建行个人网上银行本文目录 前述一、手册查看二、命令行调试串口1. 查看设备节点2. 使用stty命令设置串口3. 查看串口配置信息4. 调试串口 三、代码编写1. 常用API2. 例程线程优化 前述 在开始实验前,请一定要检查测试好所需硬件是否使用正常,不然调试过程中出现的问题&am…

本文目录

  • 前述
  • 一、手册查看
  • 二、命令行调试串口
    • 1. 查看设备节点
    • 2. 使用stty命令设置串口
    • 3. 查看串口配置信息
    • 4. 调试串口
  • 三、代码编写
    • 1. 常用API
    • 2. 例程
      • 线程优化

  

前述

   在开始实验前,请一定要检查测试好所需硬件是否使用正常,不然调试过程中出现的问题,会让你很烦恼。因为我在测试的时候发现一直接收不到消息,后面才知道ttl转usb的tx引脚坏了。所以确保硬件良好是我们后续测试的基本保障。

一、手册查看

   我们前面讲到在Linux中一切皆是文件!无论是上一章节的GPIO,还是串口这边都同样如此。首先,我们就先来使用命令行基本调试一下我们的串口,来确保串口的可用性。无论是什么开发板,我们都需要先查看手册来确定开发板的串口io。这里以香橙派AIPro为例,手册中提醒我们串口0已经被系统使用,不能当作普通串口给用户使用。 所以用户可用串口只有两个。分别是UART7和UART2。

在这里插入图片描述

查看设备节点,如下所示。
在这里插入图片描述

二、命令行调试串口

1. 查看设备节点

设备节点都在 /dev目录下。
在这里插入图片描述

2. 使用stty命令设置串口

常用配置:stty -F /dev/ttyAMA2 115200 cs8 -parenb -cstopb iutf8

在这里插入图片描述

3. 查看串口配置信息

命令:stty -F /dev/ttyAMA2 -a
在这里插入图片描述

4. 调试串口

我们使用TTL转USB接口连接香橙派与电脑,使用串口调试助手测试。注意:在串口助手中要设置为UTF8显示。
坑:在使用TTL连接时,一定要接地线!以保证电气基准电位!不要只接TX和RX!!

(1)香橙派发送数据
在这里插入图片描述

(2)香橙派接收数据
在这里插入图片描述

三、代码编写

   终端设备属性结构体,我们在操作一些设备文件时,常常会用到下面这个结构体。在Unix系统中常用于控制终端的输入输出参数,比如波特率、字符大小、控制字符等。通过操作这个结构体,可以对终端的各种属性进行设置和获取。
头文件:#include<termios.h>

struct termios {unsigned short c_iflag;//控制终端的输入方式,如是否启用回车、换行等unsigned short c_oflag; //控制终端的输出方式,如是否启用回车、换行等。unsigned short c_cflag; //控制终端的控制模式,如波特率、数据位数等。unsigned short c_lflag;//控制终端的本地模式,如是否启用回显、是否启用信号等。unsigned char c_line;//行(线)规程,指定终端的行规程,比如终端是终端设备还是伪终端设备。unsigned char c_cc[NCC]; //控制字符数组,用于定义特殊控制字符的行为,比如终端中的删除、结束、停止等功能键的行为。
};

   这些成员里都有很多配置参数的宏定义,我们只需要将成员与要配置参数的宏定义进行|=(置1)或&=~(置0)操作即可配置相应功能。我这里只先列举出来几个常用的功能。这里我将不再展示参数的宏定义,因为太多了,很多也用不到,有需要的自己去查看其他博客来学习。

●配置举例如下:

struct termios termios_p; //初始化结构体
termios_p.c_cflag |=CS8; //设置八位数据位。
termios_p.c_cflag &=~CSTOPB; //设置一位停止位。
termios_p.c_cflag &=~PARENB; //无奇偶校验位。
termios_p.c_lflag &=~ECHO ; //不回显

1. 常用API

(1)设置波特率。
   波特率,常用 B2400,B4800,B9600,B115200,B460800。

int cfsetispeed(struct termios *termios_p,speed_t speed)  //设置接收波特率
int cfsetospeed(struct termios *termios_p,speed_t speed)  //设置发送波特率
//

(2)清空缓冲区数据。
   主要用于清除输入和输出缓冲区中的数据。这个命令在处理串口通信时非常有用,特别是在初始化或重置通信通道时,以确保没有残留的数据干扰通信。

int tcflush(int fd,int queue_selector)
//int fd :文件描述符
//int queue_selector: 
/*	        TCIFLUSH:清空正读的数据,且不会读出TCOFLUSH:清空正写入的数据,且不会发送到终端TCIOFLUSH:清空所有正在发生的 I/O 数据.*/

(3)获取终端设备参数。
   函数的作用是获取指定文件描述符(fd)所关联的终端设备的当前属性,并将这些属性存储到指定的 termios 结构体(termios_p)中。

int tcgetattr(int fd,struct termios *termios_p)
//int fd :文件描述符。
//struct termios *termios_p: 设备终端结构体。

(4)设置终端设备参数,激活配置。

int tcsetattr(int fd,int optional_actions,cons struct termios *termios_p)
//int fd :文件描述符。
//int optional_actions :
/*			TCSANOW:不等数据传输完毕,立即改变属性TCSADRAIN:等所有数据传输完毕,再改变属性TCSAFLUSH:清空输入输出缓冲区才改变属性
*/		
//cons struct termios *termios_p :终端设备属性的结构体。

2. 例程

uart.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>
#include "uart.h"
#include <termios.h>void UART_Close(int fd)
{close(fd);
}int UART_Send(int fd, char *data)
{int num;num=write(fd, data, strlen(data));return num;
}int UART_Receive(int fd, char *receive)
{int num;num=read(fd, receive, sizeof(receive)-1);return num;
}int UART_Init(char *device, int baud)
{int fd;int ret;struct termios termios_p; 
//1.打开串口设备。不当作控制台。fd = open(device, O_NOCTTY | O_RDWR);if (fd < 0) {perror("open error");return -1;}
//2. 填充设备结构体memset(&termios_p, 0 ,sizeof(termios_p));termios_p.c_cflag |= CREAD;     //使能接收器的接收功能!必须配置的。termios_p.c_cflag |= CLOCAL;    //忽略调制解调器线路状态。termios_p.c_cflag |=CS8;        //设置八位数据位。//这里为了方便观看,所以写出来下面的配置,这里其实可以不写,因为我们已经先前清空结构体了。termios_p.c_cflag &=~CSTOPB; //设置一位停止位。termios_p.c_cflag &=~PARENB; //无奇偶校验位。termios_p.c_lflag &=~ECHO ; //不回显// 设置超时和最小读取字符数。必须配置!!termios_p.c_cc[VTIME] = 1;termios_p.c_cc[VMIN] = 128;switch (baud){  //设置波特率case 9600:cfsetispeed(&termios_p,B9600);  //设置接收波特率cfsetospeed(&termios_p,B9600);  //设置发送波特率break;case 115200:cfsetispeed(&termios_p,B115200);  //设置接收波特率cfsetospeed(&termios_p,B115200);  //设置发送波特率break;default:printf("不支持此波特率\n");break;}//3. 清空接收/发送缓冲,准备发送和接收数据 tcflush(fd, TCIOFLUSH);//4. 将配置好的设备结构体设置上(绑定),激活设置的配置。ret =tcsetattr( fd,TCSAFLUSH,&termios_p);if (ret < 0) {perror("tcsetattr error");return -3;}return fd; //返回文件描述符
}

uart.h

#ifndef __UART_H
#define __UART_Hvoid UART_Close(int fd);
int UART_Init(char *device, int baud);
int UART_Receive(int fd, char *receive);
int UART_Send(int fd, char *data);
#endif

main.c

#include <stdio.h>
#include <stdlib.h>
#include "uart.h" 
#include <unistd.h>
#include <termios.h>
#include <string.h>
int main()
{char buff[100];int fd;fd=UART_Init("/dev/ttyAMA2",115200);if(fd<0){perror("UART_Init error");return -1;}while(1){fgets(buff,sizeof(buff),stdin);UART_Send(fd, buff);}UART_Close(fd);return 0;
}

在这里插入图片描述

线程优化

功能:添加线程实现可收可发!
main.c

#include <stdio.h>
#include <stdlib.h>
#include "uart.h" 
#include <unistd.h>
#include <termios.h>
#include <string.h>
#include <pthread.h>
#include <signal.h>pthread_attr_t attr; //线程属性
int fd;  //文件描述符void signal_task(int arg)
{printf("销毁相关属性\n");pthread_attr_destroy(&attr); //销毁线程属性UART_Close(fd);exit(0);
}// 线程任务函数
void *task(void *arg) {int fd = *(int *)arg;int ret;char buff[64];while (1) {memset(buff, 0, sizeof(buff));ret = UART_Receive(fd, buff); // 读取数据到buff中if (ret > 0) {buff[ret] = '\0'; // 确保字符串以NULL结尾printf("Receive: %s\n", buff);} else break;}pthread_exit(NULL);
}int main()
{char buff[100];int ret;pthread_t thread;fd=UART_Init("/dev/ttyAMA2",115200);if(fd<0){perror("UART_Init error");return -1;}signal(2, signal_task);pthread_attr_init(&attr);  //初始化线程属性pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); //设置子线程分离属性,子线程推出后自动销毁。ret=pthread_create(&thread,NULL,task,(void *)&fd); //只有一个子线程,可以取地址操作。if(ret<0){perror("pthread_create error");return -1;}while(1){memset(buff,0,sizeof(buff));fgets(buff,sizeof(buff),stdin);UART_Send(fd, buff);}return 0;
}

在这里插入图片描述

http://www.zhongyajixie.com/news/30202.html

相关文章:

  • 建德建设局官方网站宁德市蕉城区
  • 天津市南开区网站开发有限公司怎样在百度打广告
  • 做erp系统的网站推广形式
  • 专做动漫av的网站推广网站公司
  • 厦门哪些企业做视频网站的校园推广方案
  • 惠州百优做网站小程序熊掌号如何做网络推广人员
  • 郑州网站建设 推广如何免费发布广告
  • 网站空间买什么的好太原高级seo主管
  • 个人网站做商城会怎样百度认证证书
  • 做网站找模板软文营销的概念
  • 婚恋网站如何做自媒体营销保定百度seo公司
  • 展示型网站多少钱南昌百度快速排名提升
  • app要多少钱才能开发seo的优化步骤
  • 安阳安强网络科技有限公司seo技术培训江门
  • wordpress账号和站内网搜索引擎推广方式
  • 外贸网站制作设计南通seo网站优化软件
  • 佛山外英语网站制作南宁seo排名外包
  • asp动态网站开发第一章asp概述推广方案经典范文
  • python做的网站源码百度题库
  • 临朐县网站建设百度公司注册地址在哪里
  • 广播电台网站建设板块官网seo优化
  • 网站制作有限公司宁波seo推广服务
  • 网站设计公司哪家好如何选择呀怎么创建自己的网站
  • 无锡做网站首选众诺媒体软文推广平台
  • 做家具定制的设计网站如何做电商赚钱
  • 做网站兴趣爱好网络热词英语
  • 淘宝网站都是怎么做的公司宣传网页怎么做
  • 网页模板免费下载网页模板神马seo教程
  • 临淄网站制作首选公司排名优化课程
  • 长沙网站制作公司报价吉林seo外包