小编Sto*_*ogy的帖子

Linux平台驱动程序和普通设备驱动程序有什么区别?

我以前想过平台驱动程序以及普通设备驱动程序,如:

请有人解释一下.

c linux linux-device-driver linux-kernel

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

为什么Visual Studio 2013在C4996上出错?

在以前版本的Visual Studio中,使用_sleep或strncpy等函数只会输出警告.在最新版本中,突然出现错误:

意外的错误

错误C4996:'_sleep':此函数或变量已被更新的库或操作系统功能取代.考虑使用Sleep.详细信息请参见在线帮助.

我知道我可以通过添加#pragma warning(disable: 4996)代码的开头来禁用它,但是VS试图强迫我使用其他功能是非常烦人的.有没有办法禁用这种行为?

在你问之前,"将警告视为错误"被禁用,即使我关闭所有警告也会出错!

c++ visual-studio visual-studio-2013

51
推荐指数
3
解决办法
7万
查看次数

用Cython包装C++库

我是Cython的新手,我想使用Cython来包装一个C/C++静态库.我做了一个简单的例子如下.

Test.h:

#ifndef TEST_H
#define TEST_H

int add(int a, int b);
int multipy(int a, int b);

#endif
Run Code Online (Sandbox Code Playgroud)

TEST.CPP

#include "test.h"
int add(int a, int b)
{
    return a+b;

}

int multipy(int a, int b)
{
    return a*b;
} 
Run Code Online (Sandbox Code Playgroud)

然后我使用g ++来编译和构建它.

g++ -c test.cpp -o libtest.o
ar rcs libtest.a libtest.o
Run Code Online (Sandbox Code Playgroud)

所以现在我得到了一个名为libtest.a的静态库.

Test.pyx:

cdef extern from "test.h":
        int add(int a,int b)
        int multipy(int a,int b)

print add(2,3)
Run Code Online (Sandbox Code Playgroud)

Setup.py:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = …
Run Code Online (Sandbox Code Playgroud)

python cython

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

使用OpenMP减少

我试图使用openmp计算2d矩阵的平均值.这个2d矩阵实际上是一个图像.

我正在进行线程划分数据.例如,如果我有N个线程,则使用thread0处理Rows/N个行,依此类推.

我的问题是我可以使用openmp减少条款"#pragma omp parallel"吗?就像是

#pragma omp parallel reduction( + : sum )
{
    if( thread == 0 )
       bla bla code 
       sum = sum + val;

    else if( thread == 1 )
       bla bla code
       sum = sum + val;
}
Run Code Online (Sandbox Code Playgroud)

openmp

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

QEMU CPU仿真原理

在QEMU中,操作系统可以在软件模拟CPU之上运行.如何通过软件模拟CPU?我想知道细节.

如果CPU是由软件模拟的,寄存器是用主机系统内存模拟的吗?说有ARM汇编代码

LDRB r0,[r1],#1

如何在x86环境中模拟?我的猜测是仿真软件为r0(4byte),r1(4byte)保留内存映射空间,然后更新相应内存位置的寄存器值...我错了吗?我想详细说明......

先感谢您

linux qemu emulation

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

Linux内核ARM转换表基础(TTB0和TTB1)

针对ARMv7编译的Linux内核2.6.34.3(Cortex-a8)

我查看了内核代码,看起来Linux内核为TTB1(转换表基础)上的内核地址空间(一切都超过0xC0000000)和ttb0上的用户进程(0xC0000000下的所有内容)设置了硬件页表,进程上下文切换.它是否正确?我仍然很困惑MMU如何知道翻译的哪个ttb?

我读到TTBCR(转换表基本控制寄存器)确定在找不到MVA时要走哪个ttb寄存器,但是寄存器总是读为0,这意味着始终在ARM体系结构参考手册中使用TTBR0.怎么可能?任何人都可以向我解释Linux内核如何使用这两个ttbs?

我从这个网站上读到ttb是如何工作的https://www.cs.rutgers.edu/~pxk/416/notes/10-paging.html但我仍然不明白内核如何使用这两个ttbs

(仔细检查了内核代码,由于某种原因ttb0和ttb1都已设置,但似乎ttb1从未使用过,我将TTB1寄存器设置为0并且Linux内核继续像往常一样运行)

operating-system arm linux-kernel

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

ROS2和DDS有什么区别?

ROS2是使用节点之间的发布者/订阅者消息传递的分布式架构

ROS2在其消息传递层采用了不同的方法,现在采用了称为数据分布式服务(DDS)的行业标准.

但是,DDS是一种用于通信的中间件,也支持发布者/订阅者.

那么,我们可以直接使用DDS,为什么要使用ROS2?

robotics data-distribution-service ros2

8
推荐指数
4
解决办法
1916
查看次数

在ith positon稍微切换一下

可能重复:
如何在C中设置,清除和切换单个位?

有人可以帮助我如何在第i个位置切换一下.一种方法是做((n>>i) ^ 1) << i.还有其他方法吗?

c bit-manipulation

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

为esp32天线获取信号量(蓝牙/ wifi双模)

我正在尝试构建一个esp32应用程序,同时启用了蓝牙和wifi。

蓝牙与a2dp配置文件一起使用,其中esp是接收器。收到数据后,应通过UDP套接字发布该数据,以广播到网络。

问题是天线。bt和wifi都在共享它。a2dp流似乎永久获取天线并很少释放它(〜2个包/分钟,我有〜3000个包/分钟)。

所以我的问题是:是否可以获取某种信号量以完全控制天线?这样我的套接字就能将数据发送到网络吗?

我将我的esp32与freeRTOS一起使用。freeRTOS库是用C编写的,但是我正在尝试将所有内容都包装在C ++中。我仍然认为此问题与C库有关,因此我将其标记为C。

我欢迎任何建议如何建立它。提前致谢。

更新

我正在使用release/v3.3官方esp-idf回购。

我有:CONFIG_SW_COEXIST_ENABLE=yCONFIG_SW_COEXIST_PREFERENCE_WIFI=y

CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE在配置中找不到。

提到的配置不起作用。

我尝试阅读该帖子,但在我的lib中找不到任何“ scan_window”或“ scan_interval”。据记载,它在某处,gap_api但找不到。

这是我的代码+配置:https : //github.com/Dimfred/esp32_bt_streamer

套接字客户端任务(应广播a2dp_msg)从此处开始:https : //github.com/Dimfred/esp32_bt_streamer/blob/master/main/app/event_handler.cpp#L22

从工作站/访问点/蓝牙/ a2dp弹出的所有事件都捕获在event_handler.hpp / cpp中

freertos esp32

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

在 Docker 容器内创建桥

我的计算机上运行着一个 docker 容器。我想在容器内使用一个程序,该程序需要有一个到虚拟网络接口的网络桥接器(容器和容器内运行的程序之间的桥接器)。

有关信息,容器正在使用网桥来访问网络(在容器和主机之间)。

容器有一个可以访问网络的 eth0 接口。我正在尝试创建一个桥接接口 br0 和一个虚拟接口 veth0。

为此,我正在编辑/etc/network/interfaces

auto eth0
iface eth0 inet dhcp

auto br0
iface br0 inet dhcp
pre-up ifconfig eth0 0.0.0.0 promisc
post-down ifconfig eth0 0.0.0.0 -promisc

pre-up ip tuntap add dev veth0 mode tap user louis
pre-up ifconfig veth0 0.0.0.0 promisc
post-down ip tuntap del dev veth0 mode tap

bridge_ports eth0 veth0
Run Code Online (Sandbox Code Playgroud)

然后,执行以下命令:

brctl addbr br0
ifconfig eth0 down && ifconfig eth0 up
ifconfig br0 up
service network-manager restart
Run Code Online (Sandbox Code Playgroud)

之后ifconfig …

bridge docker

6
推荐指数
0
解决办法
667
查看次数