- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试修改此处编写的代码:Linux C Serial Port Reading/Writing这样我就可以通过串行(使用 USB 适配器)连接控制 LED 闪光器单元。但是,当我尝试将 12 个 1 的命令写入设备,然后使用 GTKterm 和示波器检查 LED 状态时,设备似乎只接收第一项,即它正在接收命令(“10000000000”)。我相信端口设置是正确的(尽管我可能完全错误)并且已附上在 GTKterm 中正确运行的命令的以下图像! http://oi59.tinypic.com/27wrexx.jpg .有谁知道为什么会发生这种情况?非常感谢山姆
我的代码:
int flasher::allon(){
int USB = open( "/dev/ttyUSB0", O_RDWR| O_NOCTTY );
struct termios tty;
struct termios tty_old;
memset (&tty, 0, sizeof tty);
/* Error Handling */
if ( tcgetattr ( USB, &tty ) != 0 )
{
cout << "Error " << errno << " from tcgetattr: " << strerror(errno) << endl;
}
/* Save old tty parameters */
tty_old = tty;
/* Set Baud Rate */
cfsetospeed (&tty, (speed_t)B9600);
cfsetispeed (&tty, (speed_t)B9600);
/* Setting other Port Stuff */
tty.c_cflag &= ~PARENB; // Make 8n1
tty.c_cflag &= ~CSTOPB;
tty.c_cflag &= ~CSIZE;
tty.c_cflag |= CS8;
tty.c_cflag &= ~CRTSCTS; // no flow control
tty.c_cc[VMIN] = 1; // read doesn't block
tty.c_cc[VTIME] = 5; // 0.5 seconds read timeout
tty.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines
/* Make raw */
cfmakeraw(&tty);
/* Flush Port, then applies attributes */
tcflush( USB, TCIFLUSH );
if ( tcsetattr ( USB, TCSANOW, &tty ) != 0)
{
cout << "Error " << errno << " from tcsetattr" << endl;
}
unsigned char cmd[] = "111111111111 \r\n";
int n_written = 0;
do {
n_written += write( USB, &cmd[n_written], 1 );
}
while (cmd[n_written-1] != '\r' && n_written > 0);
int n = 0;
char buf = '\0';
/* Whole response*/
std::string response;
do
{
n = read( USB, &buf, 1 );
response.append( &buf );
}
while( buf != '\r' && n > 0);
if (n < 0)
{
cout << "Error reading: " << strerror(errno) << endl;
}
else if (n == 0)
{
cout << "Read nothing!" << endl;
}
else
{
cout << "Response: " << response<<endl;
}
return 0;
}
最佳答案
由于这个原因,您的代码肯定无法工作
string
有一个附加函数,它接受 char* 但它需要一个以 null 结尾的字符串。您的 buf 只是一个字符,因此如果 read() 确实在其中放入了一个字符,则无法保证内存中紧随其后的内容,因此您没有正确的以空结尾的字符串,而是未定义的行为。
您可能应该提供一个超过 1 个字符的缓冲区,然后使用需要一定长度并传入 n 的 append
版本。
否则替换
response.append( &buf );
与
response.push_back( buf );
这可能有效,但可能比使用多字符缓冲区效率低。您可能还应该在附加之前检查 read
的结果。正如代码所示,如果 read
失败,您仍然会追加。
这个语句,如果有效的话,应该切换 while 子句的顺序
while (cmd[n_written-1] != '\r' && n_written > 0);
如果 n_writing 不 > 0,则 LHS 是未定义的行为。所以
while ( n_written > 0 && cmd[n_written-1] != '\r');
您确定这是终止循环的正确条件吗?我假设 \r
是某种“消息结束”字符。
如果 write()
返回 -1,则不一定会将 n_writing
推至或低于 0。
关于c++ - Linux C++串口写入: Only one character written,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25265657/
我正在使用 SAF(存储访问框架)将文件写入 SD 卡。在 Marshmallow 上,文件的写入和更新实际上有很大的延迟(大约 10 秒)。 当我使用例如: android.support.v4.p
我不明白的意思 The original Java AWT was implemented by having widgets written in Java which delegated to p
我的 ASP.NET Core 应用程序使用“开箱即用”的外部登录身份验证。我想要实现的 - 在 facebook 挑战中,我想包装重定向 url 并将其作为 json 返回以在 jquery 前端使
我正在尝试安装 MySql Workbench 并下载 mysql-installer-web-community-5.7.13.0.msi。当我运行此文件时出现以下错误: "The instruct
考虑以下代码: #include int main() { int i = 0; printf("hello%n%d\n", &i, i); } 为什么打印hello0而不是hello5?
我是一名 Java/C++ 程序员,Ruby 是我的第一门脚本语言。有时我发现我在某些领域没有尽可能高效地使用它,例如: 目标:仅解析文件中的某些行。我要使用的模式是有一条非常大的线,尺寸大于 15,
尝试执行命令“vagrant up”时收到以下错误: --------------------------- VBoxHeadless.exe - Application Error --------
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
我正在创建一个程序,需要从仍在写入的文件中读取。 主要问题是:如果使用在单独线程上运行的 InputStream 和 OutputStream 类执行读取和写入,有什么问题和问题为了防止数据损坏,我需
问题 我有一个 HTML5/JavaScript 应用程序。我想将它提交给苹果商店。 有没有办法将它嵌入到 Safari/Webkit 中,并让 apple 接受它作为应用程序? 上下文 这个项目最初
我正在文件 btree.h 中编写一个 btree 实现类“btree”,并在文件 btree_iterator.h 中使用外部迭代器类“btree_iterator”在 btree.tem 中实现,
我正在使用 Python 3.4 将 unicode 字符串写入文件。文件写入后,打开一看,完全是另外一组字符。 代码:- # -*- coding: utf-8 -*- with open('tes
我们编写的应用程序在 XP 中运行良好,但在迁移到 Vista 和 Windows 7 时遇到了严重的问题,这可能是由于用户数据的写入位置。 用例是这样的:个人用户需要登录机器并使用它来获取数据。主管
假设我有一个名为“REVIEWS”的表 此表包含客户为各种产品撰写的评论。 我希望能够对每个客户撰写的所有评论进行“计数”,所以我写: SELECT count(*) AS counter FROM
我正在使用一个应用程序创建一个 csv 文件,然后我想导出并在手机上阅读。但是,我将其保存到的位置不可见,并且难以传输。 有没有办法将其保存到更容易访问的位置,例如电话上的/documents ? (
我写了一个小工具,用于将给定目录下的所有目录和文件名打印到文件中。程序编译正常,但运行程序后,文件未写入。这对我来说看起来很奇怪。程序代码如下所示。 在代码的第49行,当我仅使用file作为方法的参数
所以我在 c 中有以下枚举方法: enum enum_type GetInfo (int socket, unsigned char *data) { } 在 api 中我可以找到这个: 接收到的数据
我不明白下面的 C 转换函数是如何工作的(以及为什么要这样写);我相当确定原作者知道他在做什么: typedef union TValue { uint64_t u64; double n;
这个问题已经有答案了: Node.js - Find home directory in platform agnostic way (6 个回答) 已关闭 3 年前。 我正在使用fs文件系统 JS
我正在构建一个 rest api,它从其他 api 收集数据,用它做一些逻辑并发送回客户端: 我的主课: public class Main { public static void main(Str
我是一名优秀的程序员,十分优秀!