小编Jon*_*art的帖子

Modbus从站计数限制

我有两个问题:

  1. 为什么Modbus只允许247个从站连接到同一网络?

  2. 如何通过Modbus TCP/IP克服此限制?

networking modbus addressing master-slave tcp-ip

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

Linux 内核 2.6.32 或更高版本中每个 net_device 的私有数据存储在哪里?

对于 2.6.31 之前的 Linux 内核 2.4 或 2.6 net_device,每个注册网络设备的结构体都有一个与之关联的私有数据块,该数据块由结构体中的priv指针指向net_device。但是,对于内核版本 2.6.32 或更高版本,该priv指针已被弃用。

我想知道网络接口驱动程序的私有数据现在可以存储在哪里。有人清楚结构的相对较新的实现net_device吗?提前致谢。

c linux linux-kernel

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

为什么sprintf在一个例子而不是下一个例子中工作?

这是我的代码:

time_t tim=time(NULL);                        // acquire time information
struct tm * now=localtime(&tim);

char cyear[3], cmonth[2], cday[2], chour[2], cmin[2];           
int test = 13;
sprintf(cyear, "%d", test);
sprintf(cmonth, "%d", now->tm_mon+1);
sprintf(cday, "%d", now->tm_mday);
sprintf(chour, "%d", now->tm_hour);
sprintf(cmin, "%d", now->tm_min);

printf("cyear is: %s\n",cyear);
printf("cmin is: %s\n",cmin);
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

cyear is:

cmin is: 7
Run Code Online (Sandbox Code Playgroud)

输出也不适用于cmonth或cday,但chour和cmin似乎给出了正确的输出.这里发生了什么?

c string printf integer output

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

每个函数名后的@n("at符号")是什么?

我正在尝试使用Netwide Assembler学习汇编语言.

在教程中,我看到每个函数名称的末尾都有一个,例如:@n

CALL _GetStdHandle@4

CALL _WriteFile@20

CALL _ExitProcess@4
Run Code Online (Sandbox Code Playgroud)

这是什么意思?@n

(它似乎是函数名称的一部分,因为error LNK2001: unresolved external symbol如果我修改或删除该部分,我会收到错误,但显然它不是它生成的C或C++函数名称的一部分.它来自哪里? )

assembly nasm

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

如何使用gnu-efi编译uefi应用程序?

我尝试使用编译uefi代码gnu-efi。但是我不明白如何编译我的uefi应用程序代码。

我得到gnu-efi3.0.2,解压缩并输入make && make install。我写你好世界代码:

#include <efi.h>
#include <efilib.h>

EFI_STATUS efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
    InitializeLib(ImageHandle, SystemTable);
    Print(L"Hello, world!\n");

    return EFI_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我的操作系统是Ubuntu 15.04。

uefi gnu-efi

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

从内联汇编修改RIP寄存器

我正在尝试修改rip寄存器(只是为了好玩).buffer应该是一个内存地址,所以我不知道为什么会得到Error: operand type mismatch for 'movq'

#include <stdio.h>
#include <stdlib.h> 

int main(){
        char* buffer;
        buffer = (char*) malloc(8*sizeof(char));
        asm volatile("movq %0, %%rip \n" : : "r" (buffer));
        free(buffer);
}
Run Code Online (Sandbox Code Playgroud)

c assembly x86-64

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

为什么我可以在初始化后重新绑定引用?

根据C++ Primer,Stanley B. Lippman,JoséeLajoie和Barbara E. Moo:

初始化后,引用仍然绑定到其初始对象.无法重新绑定引用以引用其他对象.

那么,我似乎能够将我初始化的引用重新绑定到以下代码中的另一个对象?

#include <iostream>

int main()
{
     int num1 = 10;
     int num2 = 20;

     int &rnum1 = num1;

     std::cout << rnum1 << std::endl;   // output: 10

     rnum1 = num2;

     std::cout << rnum1 << std::endl;   // output: 20

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,num1和num2是两个不同的对象.相同的类型,是的,但两个完全不同的对象.

c++ visual-c++ c++11

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

为什么在布尔类型上转换 bool 返回总是 false

我只想知道为什么如果我使用 (bool) \xe2\x80\x94 表达式 \xe2\x80\x94 例如2 < 1\xe2\x80\x94 的布尔值进行类型转换 \xe2\x80\x94 总是返回false,即使表达式返回true

\n\n

举个例子会说的更清楚

\n\n
<?php\n$value = (bool) 2 > 1;\nvar_dump($value); // bool(false)\n\n$value = (bool) 2 < 1;\nvar_dump($value); // bool(false)\n\nvar_dump((bool)true) // bool(true)\n\nvar_dump((bool)false) // bool(false)\n
Run Code Online (Sandbox Code Playgroud)\n

php casting

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

线性时间内深度优先搜索的时间复杂度

我对以下算法的时间复杂度感到困惑,它是 O(V) 还是 O(V+E)?

DFS(G,s,t):


vis[s] = true
        if s == t
            vis[s] = false, return 1
        cont = 0
        for v is adj(s)
            if vis[v] == false
                cont = cont + DFS(G,s,t)
        vis[s] = false
        return cont
Run Code Online (Sandbox Code Playgroud)

algorithm complexity-theory time-complexity depth-first-search graph-algorithm

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

布局接口C#的正确方法

我在设计我的程序的一部分时遇到了问题(不是一次编写它!).如果不写小说,这很难解释,所以我会尽量简短.

基本上,我有一个程序可以从一个硬件读取/写入参数.目前,它通过Serial实现了这一目标,但最终,我希望通过USB使用.NET包装器来实现FTDI芯片http://www.ftdichip.com/Projects/CodeExamples/CSharp.htm

我想我的问题是,我知道我想要几层抽象,但我似乎无法知道在哪里绘制线条.首先,我不希望我的ReadParam(),WriteParam()SendCommand()函数坐在我的主窗体类中.这似乎只是拼凑而成.显然他们应该在其他类中,我将实例化.我们暂时称之为Comm.

第一个选择是,我可以创建一个接口,让我们说IComm,让我的串口和USB口味都能实现.这样做的问题是,大部分代码都会在两种风格中重复,因为我有特殊ReadReplyData()功能和其他功能,它们在将串行数据返回到GUI之前对其进行预处理.

所以下一个选择是Comm是一个中间类,它定义了一个接口ICommDriver. Comm将实现私人ReadReplyData()格式化功能,以及公众ReadParam(),WriteParam()SendCommand()功能,同时ICommDriver将指定唯一的简单ReadWrite功能.

除了两个曲折之外,这一切似乎微不足道.一,我希望这显然是多头的,所以GUI不会挂起.所以我认为这Comm将使用a BackgroundWorker来完成所有的读/写操作.此外,需要告诉Serial flavor要打开哪个COM端口(从GUI下拉列表),而USB风味则不然.那么我是否要创建界面的那一部分?

感谢大家的帮助,我几天来一直在编写/删除代码,试图找出正确的方法来做到这一点!

乔纳森

oop interface

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