标签: linux

在C++ linux中将STRINGS写入串口

我知道这个问题散布在互联网上,但是,到目前为止还没有任何东西让我完全在那里.我想将数据写入C++(linux)中的串行端口,用于Propeller板.程序在从控制台获取输入时工作正常,但是当我向其写入字符串时,总是ERROR - Invalid command从设备返回:我尝试char使用Hex值创建数组然后它工作.这是下面的工作代码.但是我怎样才能提供一个字符串变量的命令并将其发送到串口?也许,如果这是唯一的方法,我如何将其转换为十六进制值?感谢大家

注意:循环是使用来自控制台的用户输入.我需要的是一种将字符串变量发送到串行端口的方法.

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>

int main(int argc,char** argv){
    struct termios tio;
    struct termios stdio;
    int tty_fd;
    fd_set rdset;

    unsigned char c='D';

    printf("Please start with %s /dev/ttyS1 (for example)\n",argv[0]);
    memset(&stdio,0,sizeof(stdio));
    stdio.c_iflag=0;
    stdio.c_oflag=0;
    stdio.c_cflag=0;
    stdio.c_lflag=0;
    stdio.c_cc[VMIN]=1;
    stdio.c_cc[VTIME]=0;
    tcsetattr(STDOUT_FILENO,TCSANOW,&stdio);
    tcsetattr(STDOUT_FILENO,TCSAFLUSH,&stdio);
    fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK);       // make the reads non-blocking

    memset(&tio,0,sizeof(tio));
    tio.c_iflag=0;
    tio.c_oflag=0;
    tio.c_cflag=CS8|CREAD|CLOCAL;           // 8n1, see termios.h for more information
    tio.c_lflag=0;
    tio.c_cc[VMIN]=1;
    tio.c_cc[VTIME]=5;

    tty_fd=open(argv[1], O_RDWR | O_NONBLOCK); …
Run Code Online (Sandbox Code Playgroud)

c c++ linux serial-port

8
推荐指数
2
解决办法
1万
查看次数

在linux内核上寻找系统调用实现

我在寻找的实现open(),close(),write()unlink(),但我不能在任何地方找到他们!我觉得每一个功能是像sys_open,do_open,etc_open...但没有与我们使用的接口.你能帮助我吗?

我需要发现他们做了什么样的安全检查

c linux kernel linux-kernel

8
推荐指数
2
解决办法
5236
查看次数

加入多播组或仅加入IP时是否需要PORT?

我想一劳永逸地学习.连接多播套接字的步骤是什么?我知道你有绑定到一个本地接口(你需要的IP和端口是什么?),那么我知道你要加入一个组(你需要IP:再次端口要加入的地址和网络接口! !! ??)然后最后你可以离开小组.

有经验的人可以澄清这些地址的全部内容吗?我将在下面列出:

  • BindAddress(IP:PORT)
  • 网络地址(IP:PORT)
  • MulticastAddress(IP:PORT)

这里的组播在哪里以及是什么?

sockets linux networking udp multicast

8
推荐指数
1
解决办法
1万
查看次数

忽略linux中的命令退出代码

我有一个Postgres控制台命令createdb appname_production_master,如果具有此名称的数据库已存在,则返回错误退出代码.

是否可以使此命令不返回任何退出代码?

linux postgresql ubuntu

8
推荐指数
1
解决办法
3953
查看次数

Emacs支架和支架突出显示?

输入代码时,Emacs会突出显示匹配的支架或支架.使用现有代码,如果我突出它的双胞胎,有没有办法要求它突出显示匹配的支架或支架?

在处理编译器错误和警告时,我经常尝试进行健全性检查.我通常在编码之前输入两个大括号,然后插入代码,但在调试时注释掉代码时,有时会无意中注释掉一个大括号.

处理与Emacs匹配的支架和支架的任何建议?

操作系统主要是Linux/Unix,但我也在OS X和Windows上使用它.

c c++ linux emacs coding-style

8
推荐指数
1
解决办法
4591
查看次数

警告构建使用导出符号的内核模块

我有两个内核模块(比如modA和modB).modA导出符号,EXPORT_SYMBOL(symA)modB使用它.我有modA.hmodA 的标题:

...
extern void symA(int param);
...
Run Code Online (Sandbox Code Playgroud)

并在modB.c:

#include "modA.h"
...
static int __init modB_init(void)
{
    symA(10);
}
...
Run Code Online (Sandbox Code Playgroud)

如果我的insmodmodB一切正常,我的modB在内核中正确链接,并symA正确调用函数.但是当我构建modB时,编译器会发出警告:symA is undefined.LKM是ELF可重定位的,为什么编译器会发出此警告?怎么可以删除?

linux gcc kernel-module

8
推荐指数
1
解决办法
8778
查看次数

ffmpeg安装在CentOS 64位'install with -fPIC'错误

尝试在64位CentOS机器上编译ffmpeg时出现此错误.

这是我的./configure选项:

./configure --enable-shared --enable-gpl --enable-nonfree --enable-postproc --enable-swscale --enable-pthreads --enable-libx264 --enable-libxvid --enable-libvorbis --enable-libfaac --enable-libmp3lame --enable-libvpx

make

编译源代码时出现以下错误:

/usr/bin/ld: /usr/local/lib/libvpx.a(vpx_codec.c.o): relocation R_X86_64_32 against .rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libvpx.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libavcodec/libavcodec.so.54] Error 1
Run Code Online (Sandbox Code Playgroud)

我如何解决这个错误,并使用我的64位CentOS盒上的最新ffmpeg启动和运行libvpx?

linux 64-bit ffmpeg

8
推荐指数
2
解决办法
1万
查看次数

访问Linux/dev/USB作为标准文件以与USB设备通信

我正在研究如何在Linux中与USB设备进行通信,而不愿意编写Linux内核驱动程序.我知道libusb存在并且是一个可以工作的用户区域库,但是我们的嵌入式设备不支持usbfs(并且真的很难改变内核以添加支持).

所以我的问题基本上是这样的:通过直接读取/写入/ dev/USB或USB设备对应的udev文件,是否可以/建议与USB设备通信,从而绕过对自定义Linux驱动程序和usbfs的需求?

我希望一旦/ dev/USB或udev设备文件打开,只需通过文件类型的读/写命令直接读/写协议包,就可以使用USB设备协议进行通信.

请提出意见和建议.

跟进:

由于我需要与之通信的USB设备是USB HID类设备,我可以通过直接读/写/ dev/hidraw0(或相应的/ dev/hidraw设备)来使用libudev和标准的Linux USB HID RAW驱动程序.没有必要为简单的USB HID设备编写自定义驱动程序.

linux usb kernel libusb linux-kernel

8
推荐指数
1
解决办法
1万
查看次数

使用grep只匹配一行中的模式一次

我有这个:

 echo 12345 | grep -o '[[:digit:]]\{1,4\}'
Run Code Online (Sandbox Code Playgroud)

这给了这个:

1234
5
Run Code Online (Sandbox Code Playgroud)

我知道发生了什么事.如何在成功匹配后阻止grep尝试继续匹配?

我怎么才得到

1234
Run Code Online (Sandbox Code Playgroud)

regex linux bash grep

8
推荐指数
2
解决办法
3万
查看次数

用多行文本替换单行

在Linux中,我可以用什么命令用新的多行替换单行文本?我想在一行上查找关键字并删除此行并将其替换为多个新行.因此,在下面显示的文本中,我想搜索包含"keyword"的行,并用3行新文本替换整行,如图所示.

例如,替换包含关键字的行,

This is Line 1
This is Line 2 that has keyword
This is Line 3
Run Code Online (Sandbox Code Playgroud)

改为:

This is Line 1
Inserted is new first line
Inserted is new second line
Inserted is new third line
This is Line 3
Run Code Online (Sandbox Code Playgroud)

linux shell

8
推荐指数
2
解决办法
8489
查看次数