小编Jus*_*wer的帖子

Linux上的低延迟串行通信

我正在Linux上通过串口实现协议.该协议基于请求应答方案,因此吞吐量受到将数据包发送到设备并获得答案所需的时间的限制.这些设备大多是基于arm的,运行Linux> = 3.0.我遇到了麻烦,将往返时间减少到10ms以下(115200波特,8个数据位,无奇偶校验,每个消息7个字节).

什么IO接口会给我最低的延迟:使用ioctl手动选择,轮询,epoll或轮询?阻塞或非阻塞IO是否会影响延迟?

我尝试使用setserial设置low_latency标志.但它似乎没有效果.

还有其他我可以尝试减少延迟的事情吗?由于我控制所有设备,甚至可以修补内核,但它首选不要.

----编辑----

串口控制器使用的是16550A.

c++ linux serial-port throughput low-latency

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

x86汇编程序:浮点比较

作为编译器项目的一部分,我必须为x86编写GNU汇编代码来比较浮点值.我试图找到有关如何在线进行此操作的资源,据我所知,它的工作原理如下:

假设我要比较的值是浮点堆栈上的唯一值,那么fcomi指令将比较这些值并设置CPU标志,以便je可以使用...指令.

我问,因为这只会有效.例如:

.section    .data
msg:    .ascii "Hallo\n\0"
f1:     .float 10.0
f2:     .float 9.0

.globl main
    .type   main, @function
main:
    flds f1
    flds f2
    fcomi
    jg leb
    pushl $msg
    call printf
    addl $4, %esp
leb:
    pushl $0
    call exit
Run Code Online (Sandbox Code Playgroud)

即使我认为应该打印"Hallo"也不会打印,如果你切换f1和f2,它仍然不会是一个逻辑上的矛盾.jne并且jl但是似乎做工精细.

我究竟做错了什么?

PS:fcomip只弹出一个值还是同时弹出?

floating-point x86 assembly compare gnu-assembler

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

从包中获取所有类

可以说我有一个java包commands,其中包含所有继承自的类,ICommand我能以某种方式得到所有这些类吗?我正在锁定以下内容:

Package p = Package.getPackage("commands");
Class<ICommand>[] c = p.getAllPackagedClasses(); //not real 
Run Code Online (Sandbox Code Playgroud)

有可能吗?

java reflection package

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

Postgres Async API检测查询结束

我正在使用PostgreSQL C API.阅读文档时,它指出当PQgetResult返回NULL时,查询结束,如果PQisBusy没有返回0,PQgetResult将阻塞.但是如果没有更多输入,PQisBusy返回1,所以我不能调用PQgetResult并获得NULL.因此我不知道查询是否结束.有没有其他方法可以知道查询是否完成?我误解了异步API吗?

- - 编辑 - - -

C代码的基本思想是:

PQsendQuery(conn, query)

while(true)
{
    PQconsumeInput(conn)
    if(PQisBusy(conn) == 0)
    {
        PGresult* res = PQgetResult(conn);
        if(res)
        {
            //print result
        }
        else
        {
            //res == NULL
            //indicates query is over
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果将被打印,但循环永远不会终止.因为PQisBusy只返回0一次.

c sql postgresql asynchronous

6
推荐指数
2
解决办法
2180
查看次数