- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 beagleboneblack(我们称之为“BBB”)运行 3.8.13-bone47,我已经被一个错误困扰了 2 周。
我的问题是:当我的 BBB 获取字符串时,我的 BBB 会将相同的字符串发送到另一个终端。
例如:我的带有 Uart2USB 桥接器的笔记本电脑发送了一个字符串“asd”,然后 BBB 将收到“asd”。但与此同时,BBB 会发送“asd”到我的笔记本电脑。以及 BBB 上的所有 Uart 模块(Uart1、 Uart2,Uart4) 做了同样的事情。
顺便说一句,我尝试使用两个Uart(一个用于TX,另一个用于RX)来避免这个错误。幸运的是,我做到了,但我仍然想知道原因和解决方案。
这是我的 Uart.c、Uart.h 和 test.c:
/*====================Uart.c================*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <sys/time.h>
#include <string.h>
#include "Uart.h"
#define TRUE 1
#define FALSE -1
int fd_uart;
void set_speed(void)
{
int i;
int status;
int speed_arr = B38400;
struct termios Opt;
tcgetattr(fd_uart,&Opt);
tcflush(fd_uart, TCIOFLUSH);
cfsetispeed(&Opt, speed_arr);
cfsetospeed(&Opt, speed_arr);
status = tcsetattr(fd_uart, TCSANOW, &Opt);
if(status != 0)
perror("tcsetattr fd1");
}
int set_Parity(void)
{
struct termios options;
if( tcgetattr( fd_uart,&options)!= 0)
{
perror("SetupSerial 1");
return(FALSE);
}
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag &= ~PARENB; /* Clear parity enable */
options.c_iflag &= ~INPCK; /* Enable parity checking */
options.c_iflag &= ~(ICRNL|IGNCR);
options.c_lflag &= ~(ICANON );
options.c_cflag &= ~CSTOPB;
options.c_iflag |= INPCK;
options.c_cc[VTIME] = 150; // 15 seconds
options.c_cc[VMIN] = 0;
tcflush(fd_uart,TCIFLUSH); /* Update the options and do it NOW */
if(tcsetattr(fd_uart,TCSANOW,&options) != 0)
{
perror("SetupSerial 3");
return (FALSE);
}
return (TRUE);
}
void initUart(int argc, char **argv)
{
char devname_head[10] = "/dev/";
char dev_name[20];
if(argc < 2)
{
printf("Please input './test_uart ttyOx'\n");
exit(1);
} else {
strcpy(dev_name, devname_head);
strcat(dev_name, argv[1]);
fd_uart = open(dev_name, O_RDWR);
if(fd_uart < 0)
{
perror("error to open /dev/ttyOx\n");
exit(1);
} else if (fd_uart == 0) {
printf("Can't Open Serial Port!\n");
exit(0);
} else {
//Setup
set_speed(); //baud:38400
if (set_Parity() == FALSE) //8,1,n
{
printf("Set Parity Error\n");
exit(1);
}
}
}
}
void writeUartString(char *buf)
{
if ( write(fd_uart,buf,strlen(buf)) < 0)
{
printf("write error\n");
}
}
void writeUartMsg(char *buf,int num)
{
if ( write(fd_uart,buf,num) < 0)
{
printf("write error\n");
}
}
int readUart(char *buf)
{
int num = 0, i = 0;
num = read(fd_uart,buf,sizeof(buf));
if(num < 0){
printf("read error\n");
}
return num;
}
void closeUart(void)
{
close(fd_uart);
}
/*======================================================*/
/*==================Uart.h===================*/
#ifndef UART_H
#define UART_H
void set_speed(void);
int set_Parity(void);
void initUart(int argc, char **argv);
void writeUartString(char *buf);
void writeUartMsg(char *buf,int num);
void closeUart(void);
extern int fd_uart;
#endif
/*=======================================*/
/*================test.c=================*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Uart.h"
int main(int argc, char **argv)
{
int i = 0,temp = 0;
char buf[64] = {0};
initUart(argc,argv);
while(1){
writeUartString("waiting\n");
printf("waiting\n");
memset(buf,0,64);
temp = readUart(buf);
printf("readUart's return value = %d\n",temp);
if (temp > 0){
printf("get something\n");
printf("%s\n",buf);
}
sleep(1);
}
return 0;
}
/*====================================*/
有人也遇到过这种情况吗?
最佳答案
您启用了回显
options.c_lflag &= ~(ICANON );
至少将其更改为
options.c_lflag &= ~(ICANON | ECHO );
所有标志都保持其原始状态,而不是除了 ICANON
。
关于c - 我在使用 BeagleboneBlack Uart 时遇到了大麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41327737/
无法运行 bitbake 命令,如果这样做我会收到以下错误 joe@joe-O-E-M:~/BeagleBone/poky-dora-10.0.1/build$ bitbake core-image-
我正在尝试将压缩图像复制到Beaglebone内部的分区中。 通常,这是一个两步过程: xz -d console.img.xz # console.img is created dd if=cons
我为什么要读这个? 如果您有Beaglebone Black(BBB),并且想将自己的设备连接到它(而不是斗篷),则可能已经听说过设备树。就我而言,我想将RTC设备连接到BBB上的I2C总线。网络上散
我昨天买了 beaglebone black 并尝试使用 USB 连接它。正如我所读到的那样,它预装了运行在 192.168.7.2 的 Linux Distro,我们可以使用 ssh 访问它。但我无
我们目前正在为 BeagleBone Black 开发一个应用程序(使用标准的 Angstrom 发行版)。它在 GDB(由 Netbeans 远程控制)下运行了一段时间(5-10 分钟),但在某个相
我正在尝试将音频ADC(wm8782 / pcm1803a)与Beagle Black连接。我已经对文件 davinci-evm , wm8782.c 和BB-BONE-AUDI-01设备树覆盖文件进
我已经有一个 C 代码,可以使用 I2C 通信从加速度计读取数据,并将其打印在控制台中或将其存储在 beaglebone 内存中的 .txt 文件中。该项目的目的是将这些数据实时保存在我的电脑中,以便
我已经使用 Beaglebone Black 几年了,并且一直在努力配置引脚。 有很多方法随着内核更新而改变。结果,互联网上的许多信息与其他帖子相矛盾,其中许多根本不再起作用。 我见过管脚管理器、管脚
我通常使用 connman 使用以下命令为我的 beaglebone 硬件设置静态 IP:connmanctl config ethernet_985dad375f63_cable --ipv4 手册
我需要每 5 毫秒读取一次 BBB 中的所有 7 个模拟引脚。我正在使用以下 C 代码执行此操作: void main(){ char value_str[7]; long int v
我的 beagleboneblack(我们称之为“BBB”)运行 3.8.13-bone47,我已经被一个错误困扰了 2 周。 我的问题是:当我的 BBB 获取字符串时,我的 BBB 会将相同的字符串
我使用 gcc-linaro-arm-linux-gnueabihf-2014.05 在我的 mac 上使用 eclipse 交叉编译 BeagleBoneBlack (Rev c)。 我使用了这个博
硬件:BeagleBoneBlack 操作系统:Debian Jessie 内核:4.4.30-ti-r64 U-Boot: U-Boot 2016.11-rc3-00002-g73df7f7(201
有什么方法可以配置 systemd 服务(例如 serviceX)以等待 connmand 服务在 serviceX 运行之前完成网络接口(interface)配置?根据我对 systemd 的理解,
我正在使用 debian 系统开发 beaglebone black,我想通过修改“/etc/network/interfaces”来更改我的 IP,这是有效的,但是当我从 DHCP 方法切换到静态方
我正在尝试更改 BeagleBone Black 的 USB0 端口的静态 IP 地址。 我知道此线程之前已打开 ( Changing the static IP of Beagle Bone Bla
我有一个 Beaglebone Black Industrial (BBBI),我认为它与 Beaglebone Black 非常相似。 我想让BBBI默认启动到microSD卡,我发现这个guide
注意:所选答案是解决问题的原始答案,更多详细信息请参阅下面的附加答案。 我无法在 BeagleBone Green Wireless (BBGW) 上配置 SPI0。我试图在不使用覆盖层的情况下实现这
关于如何在较新版本的内核上为 PWM 配置 Beaglebone 的信息非常少。 Past instructions通过插槽文件与 PWM 接口(interface)的方法已过时,因为插槽文件和 bo
注意:所选答案是解决问题的原始答案,更多详细信息请参阅下面的附加答案。 我无法在 BeagleBone Green Wireless (BBGW) 上配置 SPI0。我试图在不使用覆盖层的情况下实现这
我是一名优秀的程序员,十分优秀!