- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Mono 下使用从 Linux 到 Arduino Nano 的 USB 连接 (FTDI)。这主要是有效的,但过了一会儿,我在一个看似随机的时间得到了一个试图写入 SerialPort 的 TimeoutException。显然(参见 the FIXME 和相关的 bug report ),Write 中的任何错误都会导致 TimeoutException,并且没有时间延迟,所以我认为可以公平地假设它实际上不是超时,而只是一个错误。
单声道代码:
// FIXME: this reports every write error as timeout
if (write_serial (fd, buffer, offset, count, write_timeout) < 0)
throw new TimeoutException("The operation has timed-out");
Here (请参阅 write_serial)是正在调用的 Mono 包装器,它似乎将“轮询”或“写入”的任何错误结果转换为简单的 -1 错误结果。
单声道助手:
int
write_serial (int fd, guchar *buffer, int offset, int count, int timeout)
{
struct pollfd pinfo;
guint32 n;
pinfo.fd = fd;
pinfo.events = POLLOUT;
pinfo.revents = POLLOUT;
n = count;
while (n > 0)
{
ssize_t t;
if (timeout != 0) {
int c;
while ((c = poll (&pinfo, 1, timeout)) == -1 && errno == EINTR)
;
if (c == -1)
return -1;
}
do {
t = write (fd, buffer + offset, n);
} while (t == -1 && errno == EINTR);
if (t < 0)
return -1;
offset += t;
n -= t;
}
return 0;
}
我从 Windows/.NET 到同一台设备并使用相同的写入代码进行通信没有遇到任何问题(您将在下面看到)。
这让我有点不知所措,不知道如何在不编写一些我希望能够重现与我当前代码相同的 IO 模式和时序的大量 C 测试的情况下进行诊断。有端口嗅探器,但那只会捕获数据,而不是诊断和错误。有没有办法在 Linux 内核中捕获和记录 IO 错误?
我的代码非常简单。这是相关的片段:
_port = new SerialPort(portName, Configuration.BaudRate);
_port.NewLine = "\n";
_port.ReadTimeout = Configuration.StartupCommandTimeout; // 7000ms
_port.WriteTimeout = Configuration.StartupCommandTimeout;
_port.Open();
_port.WriteLine(command);
这总是发生在远离主线程的地方,尽管可能并不总是发生在构建、读取和写入端口的同一线程上。
使用 Mono 版本 3.2.8,虽然下面的代码来自 Master,但似乎没有改变。我在 ARM 上运行 Ubuntu 15.10。
最佳答案
在我的控制系统中,我有很多线程同时执行。通过为串行端口提供服务的参与者(本质上是线程)增加线程优先级 (ThreadPriority.AboveNormal),我似乎已经最小化或可能消除了这个问题。也许 Linux 比 Windows 对串口服务饥饿问题更敏感,或者是硬件不同。
关于c# - 是什么导致 Mono 下的 SerialPort.Write 出现偶发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324664/
我正在执行 UPDATE .WRITE() 语句,并发现它显然只有在您像这样定义它时才有效: string sql = "UPDATE [dbo].[Table] SET [Column].WRITE
我在 Unix 系统上用 C 编程。我知道: write(fd,"ABCD",4); 比这样做更好: write(fd, "A", 1); write(fd, "B", 1); write(fd, "
func hash(s string) uint32 { h := fnv.New32a() h.Write([]byte(s)) return h.Sum32() } 对于这
在经典的 asp 页面中,有人告诉我您可以使用 vbscript 或 jscript。而 jscript 就是 javascript。 所以我不确定 Response.Write、Response.W
当 openssl 子进程尝试 write() 到本地目录时,我收到此错误。在调用 write() 之前连接已关闭。它没有与 ssl 连接,因为我什至无法从 nodejs 文档启动示例代码。 我错过了
最近我在试验netty。我遇到了以下问题: ctx.channel().write(new TextWebSocketFrame("hello")) 没有在客户端返回 hello,但是 ctx.cha
请解释以下内容: def feed(data): import os print "DATA LEN: %s" % len(data) f = open("copy", "w") f.
有什么区别debug.write 和 Trace.write ?每个应该什么时候使用? 最佳答案 在典型的发布构建配置中,Debug class 被禁用并且什么都不做。 Trace但是,仍然可以在发行
我只是想知道,就性能而言,哪个更好(我在 FileStream 中使用 StreamWriter): 多次调用 Stream.Write(): StreamWriter sw = new Stream
我发现自己写给 stringwriter,然后在函数末尾执行 resp.Write(sw.ToString())。这是不必要的吗?如果我多次使用 HttpResponse.Write,即使我的页面是
我正在尝试通过 JavaScript 文件从 electron 打开一个新窗口,它可以工作,并打开了新窗口,但我无法将 HTML/文本写入新文件。我收到那个错误: Cannot read proper
我们对 QIODevice::write 的一般行为和具体的 QTcpSocket 实现感到非常困惑。有一个 similar question已经,但答案并不令人满意。主要的混淆源于分别提到的 byt
我知道这听起来像是一个愚蠢的问题: write(*,*) 和 write(6,*) ?我在我研究所的 super 计算机上运行一个复杂的代码,它通过一个不同于 6 的单元号输出一个数据文件,显然编译的
我有一个结构体,它可以通过一系列复杂的方法调用转换为文本,其中包含大量 write!调用。此文本可以写入文件或调试日志。我正在决定是否使用 fmt::Write 或 io::Write .我不能真正使
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
In the C standard library, an output can't be followed by an input and vice versa. 对于Linux API,可以在re
我希望能够为一件事做 document.write。然后延迟半秒,然后再记录。写一些。你知道这是否可能吗?而且,如果是这样,怎么办?到目前为止,我已经尝试过了,但没有奏效: document.writ
为什么通过 onclick 属性调用的 write() 函数解析为 document.write() 并替换文档?有什么办法可以阻止这种情况发生吗? Write Function Alternat
我想创建一个包含多个“页面”的文本文件,并将每个页面的字节偏移量记录在一个单独的文件中。为此,我将字符串打印到主输出文件并使用 bytes_written += file.write(str) 计算字
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!