当前位置: 首页 > news >正文

Powerlink协议在嵌入式linux上的移植和主从站通信(电脑和linux板通信实验)

使用最新的openPOWERLINK 2.7.2源码,业余时间搞定了Powerlink协议在嵌入式linux上的移植和测试,并进行了下电脑和linux开发板之间的通信实验。添加了一个节点配置,跑通了源码中提供的主站和从站的两个demo。这里总结下移植过程分享给有需要的人。在嵌入式linux下的移植还是蛮简单的,相信即便移植到单片机中也不是什么难事。挺好玩的,感兴趣的可以尝试尝试。

测试结果

QT的demo运行在64位的win10 电脑上,从站的demo运行在嵌入式linux开发板上。板子的网口连接在局域网内的任一根网线。使用的linux开发板配置并不高也比较老了。周立功的EasyARM-iMX283开发板,板子不到一百块。主频454M,内存64M,FLASH 128M,板子系统内核linux-2.6.35.3。

先附一张测试的效果图,如下:

在测试demo的从站中,输入按键i,能看到主站上Digital Inputs的绿色灯发声了变化。(Press i to increase the digital input)PDO的映射关系如下:

运行demo:

chmod +x demo_cn_console
export LD_LIBRARY_PATH=$(pwd)
./demo_cn_console

linux板子上从站启动内容: 

移植准备

1.电脑虚拟机中的linux环境,之前一直使用的是Ubuntu14.14和18.08,这次体验使用了下最新国产深度deepin系统社区版(23),体验真不错挺好用,界面也漂亮。deepin系统配置下阿里的镜像源(/etc/apt文件夹中的sources.list文件),添加阿里镜像:

deb [by-hash=force] https://mirrors.aliyun.com/deepin apricot main contrib non-free

内容如下:

## Generated by deepin-installer
deb https://community-packages.deepin.com/beige/ beige main commercial community
#deb-src https://community-packages.deepin.com/beige/ beige main commercial community
deb [by-hash=force] https://mirrors.aliyun.com/deepin apricot main contrib non-free

2.openpowerlink最新版本源码:Download openPOWERLINK

3.libpcap 库的交叉编译,我使用的 libpcap库是libpcap-1.10.4.tar.gz,下载地址:https://www.tcpdump.org/release/libpcap-1.10.4.tar.gz

4.cmake环境安装 

deepin系统下安装cmake很简单的,直接sudo apt-get install cmake即可。

移植过程

交叉编译工具链配置

我使用的是板子配套提供的arm-gcc工具链gcc-4.4.4-glibc-2.11.1-multilib-1.0,放到了/opt/arm的目录下。在openpowerlink的源码的cmake目录下,新建文件:toolchain-imax283-arm-linux.cmake,用来配置你的交叉编译工具链。内容如下:

################################################################################
# Name of the target platform
#set(CMAKE_C_COMPILER "/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gcc")
#set(CMAKE_CXX_COMPILER "/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-g++")SET(ARM_TOOLCHAIN_DIR /opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0 CACHE STRING "imax283 arm toolchain path")################################################################################
# Name of the target platform
SET(CMAKE_SYSTEM ARM-linux-eabihf)
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)# Version of the system
SET(CMAKE_SYSTEM_VERSION 1)# specify the cross compiler
set(CMAKE_C_COMPILER "/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gcc")
set(CMAKE_CXX_COMPILER "/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-g++")#SET(CMAKE_C_COMPILER arm-fsl-linux-gnueabi-gcc)
#SET(CMAKE_CXX_COMPILER arm-fsl-linux-gnueabi-g++)
#SET(CMAKE_ASM-ATT_COMPILER arm-fsl-linux-gnueabi-as)SET(CMAKE_FIND_ROOT_PATH ${ARM_TOOLCHAIN_DIR}/arm-fsl-linux-gnueabi/arm-fsl-linux-gnueabi)
# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries in the target and build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
# for headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)# cross compiler directives
SET(MAKE_KERNEL_ARCH arm)
SET(MAKE_KERNEL_CROSS_COMPILE ${ARM_TOOLCHAIN_DIR}/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-)

libpcap库的移植【非必须】

在deepin系统下编译libpcap库源码需要先安装依赖bison和flex。

bison和flex这两个是啥?平常很少接触到,因为这两个看着有点儿高深,跟编译器开发相关的。如果你的deepin包更新错了,以下换个可能用到:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/dbus_1.12.20.6-1+deepin_amd64.deb

以下内容作为科普,可以忽略:(Bison和Flex是生成解析器的工具。Bison是一种生成LR(1)语法分析器的工具,它可以根据语法规则和动作代码生成C代码的解析器。而Flex是一种用于生成词法分析器的工具,它可以将输入的词素(token)流转换为C代码的词法分析器。

Pcap库是一种用于网络数据包捕获和分析的C库。在编译安装Pcap库时,需要Bison和Flex工具的支持,这是因为Pcap库使用Bison和Flex来生成解析网络数据包的C代码。

在Pcap中,Bison和Flex主要用于将Pcap的数据包解析规则转换为C代码。由于Pcap支持多种协议,因此需要一种机制来定义这些协议的数据包格式。这就是Bison和Flex的作用所在。 具体来说,Bison用于解析语法规则和动作代码,然后生成C代码的解析器。而Flex则用于将数据包转换为词汇单元。这些词汇单元可以是Ethernet帧的源和目的MAC地址、IP包的源和目的IP地址等等。一旦词汇单元被产生,Bison就会使用它们来解析数据包的语法规则。 例如,假设我们想要解析网络中的HTTP数据包。我们需要定义HTTP数据包的格式,包括请求行、头部、正文等等。使用Bison和Flex,我们可以将HTTP数据包的格式转换为语法规则和动作代码,然后生成C代码的解析器。这个解析器可以将HTTP数据包转换为语法树,并提供一个易于使用的API,以便我们可以提取出HTTP请求的相关信息。)

安装依赖:

sudo apt-get install bisonsudo apt-get install flex

pacp源码编译:

接下来进入libpcap源码目录,设置临时环境变量,让能找到交叉编译工具链。

export PATH=/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin:$PATH

接下来:

//1.
cd libpcap-1.10.4/
//2.
export CC=arm-fsl-linux-gnueabi-gcc
//3.
./configure --host=arm-linux --with-pcap=linux//4.最后,make,make install
makemake install

openpowerlink库的移植

进入openpowerlink源码的stack的build目录,新建个arm-linux文件夹。进入到此文件夹下,开始执行cmake命令。这时之前配的交叉工具链toolchain-imax283-arm-linux.cmake派上了用途。如下:

cmake -DCMAKE_TOOLCHAIN_FILE=../../../cmake/toolchain-imax283-arm-linux.cmake ../.. -DCMAKE_BUILD_TYPE=Release -DCFG_COMPILE_LIB_[LIB_NAME]=ON -DCFG_COMPILE_LIB_[LIB_NAME]_LIB_DIR=[PATH_TO_HW_LIB]

最后把需要的liboplkcn.a这个协议栈静态库放到以下路径下,供编译从站的那个demo使用。

cp liboplkcn.a /home/test/openpowerlink/stack/lib/linux/liboplkcn.a

更简单的移植

以上的移植过程,依赖了pcap这一网络库,所以看着稍微麻烦些。通过查看驱动源码,stack\src\kernel\edrv下面有个edrv-rawsock_linux.c,通过使用原始套接字直接操作链路层的mac帧,也是可以的。这样就可以不用非得安装pcap这个库了。修改cmake编译开关如下即可:

如果嫌开关有点儿多,也可以在stack\cmake\options-linux.cmake文件中修改,关掉不需要的选项。

root@hecs-287347:~/test/powerlink/stack/build/arm-linux# cmake -DCMAKE_TOOLCHAIN_FILE=../../../cmake/toolchain-imax283-arm-linux.cmake ../.. -DCMAKE_BUILD_TYPE=Release  -DCFG_COMPILE_LIB_CNDRV_PCAP=OFF -DCFG_COMPILE_LIB_MNDRV_PCAP=OFF  -DCFG_COMPILE_LIB_MNAPP_PCIEINTF=OFF -DCFG_COMPILE_LIB_MNAPP_ZYNQINTF=OFF -DCFG_COMPILE_LIB_CNAPP_ZYNQINTF=OFF

编译日志如下:

42%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/generic.c.o
[ 42%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/processimage.c.o
[ 42%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/sdotest.c.o
[ 42%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/service.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdu.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdal.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/dll/dllucal.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/event/eventu.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/nmtu.c.o
[ 44%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/nmtcnu.c.o
[ 44%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/nmtmnu.c.o
[ 44%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/identu.c.o
[ 44%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/statusu.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/syncu.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdou.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdoucal.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdoucal-triplebufshm.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdotest-com.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdotest-seq.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocom-dummy.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocom.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocom-std.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocomsrv.c.o
[ 47%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocomclt.c.o
[ 47%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoseq.c.o
[ 47%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoasnd.c.o
[ 47%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoudp.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/timesync/timesyncu.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/errhnd/errhndu.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/ctrl/ctrlu.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoudp-linux.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/ctrl/ctrlucal-direct.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/dll/dllucal-circbuf.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/errhnd/errhnducal-local.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/event/eventucal-linux.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/event/eventucalintf-circbuf.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdoucalmem-local.c.o
[ 50%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/timesync/timesyncucal-local.c.o
[ 50%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/timer/timer-linuxuser.c.o
[ 50%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllk.c.o
[ 50%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkfilter.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkstatemachine.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkevent.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkframe.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllknode.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkcal.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/event/eventk.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/nmt/nmtk.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdok.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdokcal.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdokcal-triplebufshm.c.o
[ 53%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdoklut.c.o
[ 53%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/timesync/timesynck.c.o
[ 53%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/errhnd/errhndk.c.o
[ 53%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/errhnd/errhndkcal.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/ctrl/ctrlk.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/led/ledk.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/led/ledktimer.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/ctrl/ctrlkcal-direct.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkcal-circbuf.c.o
[ 55%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/errhnd/errhndkcal-local.c.o
[ 55%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/event/eventkcal-linux.c.o
[ 55%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/event/eventkcalintf-circbuf.c.o
[ 55%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdokcalmem-local.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/timesync/timesynckcal-local.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/debugstr.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/ftracedebug.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/root/test/powerlink/contrib/trace/trace-printf.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/target-linux.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/target-mutex.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/netif-linux.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdconf-fileio.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdconfcrc-generic.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/circbuf/circbuffer.c.o
[ 58%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/circbuf/circbuf-posixshm.c.o
[ 58%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/memmap/memmap-null.c.o
[ 58%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/veth/veth-linuxuser.c.o
[ 58%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/timer/hrestimer-posix.c.o
[ 59%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/edrv/edrvcyclic.c.o
[ 59%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/edrv/edrv-rawsock_linux.c.o
[ 59%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/ami/ami.c.o
[ 59%] Linking C static library liboplkcn.a
[ 59%] Built target oplkcn

通过 liboplkcn.a的编译过程可以看出从站协议栈库依赖了哪些文件,有哪些是跟linux平台相关的,从而方便移植到单片机或其他平台中。如以上过程中,跟网络驱动相关的在文件:src/kernel/edrv/edrv_rawsock_linux.c文件中。除此之外,还有多处是跟平台相关的,如果要移植的话也需要修改。或者通过stack\cmake\stackfiles.cmake文件,查看哪些是跟平台有关的文件需要移植。

抛个问题,openpowerlink的源码,必须依赖底层有tcp/ip协议栈吗?看源码系统架构框图,似乎sdo使用到了udp协议发送。

最后查看源码发现tcp/ip协议栈非必须,因为源码里可以配置,sdoasnd.c,SDO over ASnd protocol,这样不走udp协议,则不需要非得有tcp/ip协议栈。

主站demo_mn_qt源码编译

主站demo_mn_qt的编译,这个简单就不介绍了。这个主站是跑在电脑上的,不用交叉编译。只要windows电脑上有cmake环境和msvc或mingw工具链,编译没什么问题,需要把stack协议栈库和demo_mn_qt都编译。

从站demo源码的编译

在以上条件都就绪的前提下,编译从站的那个demo也很简单了。直接进入apps/demo_cn_console目录下,同样再进入build目录,新建个arm-linux文件夹并进入。最后执行以下cmake指令即可。

cmake -DCMAKE_TOOLCHAIN_FILE=../../../cmake/toolchain-imax283-arm-linux.cmake ../.. -DCMAKE_BUILD_TYPE=Release 

 demo_cn_consloe交叉编译成功:

此处从站demo编译时需要注意的是,如果之前编译的liboplkcn.a没有依赖pcap, 则编译会失败。因为默认提供的apps/demo_cn_console/linux.make文件里,默认链接了pcap库。需要改下,去掉pcap库的链接方能通过编译。

板子上运行验证

需要用到libpcap.so.1这个编译过的库,放到板子上。运行测试通信成功。按i键改变从站中的值可以看到主站这个demo界面上的Digital Inputs的绿色灯移动。

其他资源

openPOWERLINK: Building openPOWERLINK Stack Libraries

单片机+PHY芯片+Powerlink协议实现高效数据采集探究(工业总线485和CAN的升级)_特立独行的猫a的博客-CSDN博客

交叉编译libpcap_libpcap交叉编译_佚名网友的博客-CSDN博客

Generic Netlink分析和使用_庾志辉的博客-CSDN博客

flex与bison_百度百科

解决错误apt --fix-broken install_子翊寒的博客-CSDN博客

(二)PowerLink理论知识_ty_xiumud的博客-CSDN博客

POWERLINK的网络组态

POWERLNK协议笔记_茹茹思密达的博客-CSDN博客

关于deepin应用商店一直显示正在安装&&安装时出现有未能满足的依赖关系的解决方法_deepin依赖关系不满足_ぃ未来可期的博客-CSDN博客

相关文章:

Powerlink协议在嵌入式linux上的移植和主从站通信(电脑和linux板通信实验)

使用最新的openPOWERLINK 2.7.2源码,业余时间搞定了Powerlink协议在嵌入式linux上的移植和测试,并进行了下电脑和linux开发板之间的通信实验。添加了一个节点配置,跑通了源码中提供的主站和从站的两个demo。这里总结下移植过程分享给有需要的…...

快速理解基本的cookie、session 和 redis

一、Cookie 1、什么是Cookie 1、Cookie实际上是一小段的文本信息,是一种keyvalue形式的字符串。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。 2、当浏览器再请求…...

STANet代码复现出现的问题

1 IndexError: boolean index did not match indexed array along dimension 0; dimension is 4194304 but corresponding boolean dimension is 65536定位到导致错误的代码,是metric.py,Collect values for Confusion Matrix 收集混淆矩阵的值时出错 …...

Java 中String对象详解

Java语言中的String对象是一个非常常见的数据类型,大多数情况下我们都是在使用String对象来表示字符串类型的数据。Java中的String类是一个final class,它是不可被继承的。本文将对Java中的String对象进行详细全面的描述,包括以下几个方面&am…...

k8s nfs运行问题、etcd问题、calico网络问题

服务器重启后nfs运行问题导致服务不能正常重启 解决办法 在每个节点下使用如下命令进行查看nfs是否正常启动 systemctl status nfs 如果没有启动,则使用如下命令启动,保证三个节点下的nfs都正常启动 systemctl start nfs 再次查看nfs是否正常启动 syst…...

Qt--QString字符串类、QTimer定时器类

目录 1. QString 字符串类 dialog.cpp 2. 容器类 2.1 顺序容器 QList 示例代码: student.h student.cpp dialog.h dialog.cpp 运行结果: 2.2 关联容器 QMap 示例代码: dialog.h dialog.cpp 运行结果: 3. Qt类型 3.1 跨平台数据类型…...

2023.5.13>>Eclipse+exe4j打包Java项目及获取exe所在文件的路径

Eclipseexe4j打包Java项目及获取exe所在文件的路径 1、打包exe文件1.1 打jar包1.2 打包exe2、在程序中获取exe所在路径3、遇到问题4、JDK version和class file version(Class编译版本号)对应关系5、参考文章 1、打包exe文件 1.1 打jar包 右单击项目选择“Export…” 1.2…...

Centos系统的使用基本教程

Centos是一款流行的Linux操作系统,它基于Red Hat Enterprise Linux系统,是一款稳定、可靠、安全的操作系统。本文将介绍Centos系统的基本使用方法,包括安装、命令行操作、软件安装和系统管理等方面的内容。 安装Centos系统 Centos系统可以从…...

IDEA生成ER图、UML类图、时序图、流程图等的插件推荐或独立工具推荐

以下是几个常用的IDEA插件和独立工具,可以用于生成ER图、UML类图、时序图、流程图等: Visual Paradigm (独立工具) Visual Paradigm是一个强大的建模工具,可以生成UML类图、时序图、流程图等。它支持多种语言和框架,包括Java、Spr…...

Python心经(3)

这一节总结点demo和常用知识点 目录 有关字符串格式化打印的 lambda匿名函数,,将匿名函数作为参数传入 文件读写 生成器 python的装饰器 简单的网站代码: 有关三元运算 推导式: 新浪面试题: 有关面向对象里…...

单工,半双工,全双工通讯

对于点对点之间的通信,按照消息传送的方向与时间关系,通信方式可分为单工通信、半双工通信及全双工通信三种。 单工通信 单工通信(Simplex Communication)是指消息只能单方向传输的工作方式。 在单工通信中,通信的信…...

【2023-05-09】 设计模式(单例,工厂)

2023-05-09 设计模式(单例,工厂) 单例模式 顾名思义,就是整个系统对外提供的实例有且只有一个 特点: ​ 1、单例类只有一个实例 ​ 2、必须是自己创建唯一实例 ​ 3、必须给所以对象提供这个实例 分类&#xff…...

批量任务导致页面卡死解决方案

需求背景 需要基于高德地图展示海量点位(大概几万个),点位样式要自定义(创建DOM),虽然使用了聚合点,但初始化时仍需要将几万个点位的DOM结构都创建出来。 这里补充一句,高德地图在2.…...

避免“文献综抄”,5种写作结构助你完成文献综述→

很多作者可能有过这样的体验:读了很多文献,但在写综述的时候总感觉不像是在写文献综述,更像在写文献总结 如果引用方面不注意,甚至会成为文献综抄。 那么,你可以参考下我们整理的以下资料哦~ 01 文献总结和文献综述的…...

Java异常和反射

JAVA 异常分类及处理 概念 } final Entry<K,V> getEntryUsingComparator(Object key) { K k (K) key; // 获取该 TreeMap 的 comparator Comparator<? super K> cpr comparator; if (cpr ! null) { // 从根节点开始 Entry<K,V> p …...

Accesss数据库的那点事

Accesss数据库的那点事 1.Access的简介 Access&#xff08;全称为Microsoft Access&#xff09;是一个关系型数据库管理系统&#xff08;RDBMS&#xff09;。它是由微软公司开发的数据库软件&#xff0c;用于创建、管理和操作数据库应用程序。 Access提供了一个可视化的开发环…...

网络基础学习:osi网络七层模型

osi网络七层模型 什么是OSI&#xff0c;什么是ISO?为什么ISO要提出OSI网络七层模型&#xff1f;OSI七层的划分以及具体内容第七层 应用层第六层 表示层第五层 会话层第四层 传输层第三层 网络层第二层 数据链路层第一层 物理层 每一层与设备的对应关系 什么是OSI&#xff0c;什…...

EndNote X9 引用参考 单击文献编号,不能跳转到文尾文献列表处,咋解决?文献编号 不能跳转 ,怎么办?

文章目录 1 正常情况下 引用文献编号 是可以跳转的2 问题分析3 解决方法4 EndNote X9 插入参考文献常见问题总结5 EndNote X9 快速上手教程&#xff08;毕业论文参考文献管理器&#xff09; 1 正常情况下 引用文献编号 是可以跳转的 正确的插入文献后&#xff0c; 正常情况下&a…...

用免费蜜罐工具配置Modbus工控蜜罐

导语&#xff1a;本文将用DecoyMini免费蜜罐工具来配置自定义的ModbusTCP工控仿真模板&#xff0c;并介绍部署后的Modbus蜜罐的使用效果。 DecoyMini是一个免费的蜜罐工具&#xff0c;其特色是仿真能力采用与软件松耦合的仿真模板来进行管理。通过一键式导入云端仿真模板库里的…...

DataGridXL中快速搜索单元格和底部全屏模式区域隐藏

DataGridXL表格是在2020年发布&#xff0c;DataGridXL在设计时就考虑到了性能。提供最快、最简单、最可靠的数据网格。DataGridXL支持所有常用所有的浏览器&#xff0c;为 Web 应用程序提供类似于 Microsoft Excel 的体验&#xff0c;它支持前端框架有Vue、React、Angular等。 …...

DotNet几种微服务框架,你用过吗?

最近有群友问&#xff0c;.NET有哪些微服务框架&#xff1f;.NET的微服务框架还真不多&#xff0c;一般企业都会自己搭建微服务框架&#xff0c;或者基于其它框架搭建微服务&#xff08;比如abp&#xff09;。本文将介绍几种微服务框架&#xff0c;供大家学习参考。 一、Servi…...

Nature | 生成式人工智能如何构建更好的抗体

疫情高峰期&#xff0c;研究人员竞相开发一些首批有效的COVID-19治疗方法&#xff1a;从已经康复的人的血液中分离出来的抗体分子。 现在&#xff0c;科学家已经证明&#xff0c;生成式人工智能&#xff08;AI&#xff09;可以通过一些繁琐的过程提供捷径&#xff0c;提出增强抗…...

【hive】基于Qt5和libuv udp 的lan chat

作者已经不更新了,但是很棒 在线用户列表: 聊天窗口 主程序 单独的网络线程: network_thread data管理关联网络管理的 程序update升级更新 和消息收到 即可...

Java版本工程项目管理系统源码,助力工程企业实现数字化管理

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…...

什么是零拷贝?

零拷贝 什么是零拷贝 零拷贝指的是&#xff0c;从一个存储区域到另一个存储区域的copy任务无需CPU参与就可完成。零拷贝的底层是 通过DMA总线技术实现的。零拷贝与具体的编程语言无关&#xff0c;完全依赖于OS&#xff0c;OS支持就可使用&#xff0c;不支持 设置了也不起作用…...

计算机专业含金量高的证书

目录 第一种证书&#xff1a;计算机技术与软件专业资格考试证书 第二种证书&#xff1a;微软认证 第三种证书&#xff1a;Oracle认证 第四种证书&#xff1a;思科认证 第五种证书&#xff1a;华为认证 第六种证书&#xff1a;红帽认证工程师 第七种证书&#xff1a;阿里…...

原装二手Keithley 2401低压源表 吉时利2401数字源表

Keithley 2401低压源表&#xff0c;20V&#xff0c;1A&#xff0c;20W Keithley 2401 低压源表提供精密电压和电流源和测量功能&#xff08;1V - 20V 和 10pA - 1A&#xff09;。它既是高度稳定的直流电源&#xff0c;又是真正的仪器级 5 位万用表。电源特性包括低噪声、精度和…...

gradle-8.1.1-all 快速下载百度网盘下载

Gradle 8.1.1 发布 这是Gradle 8.1的第一个补丁发布。 它修复了以下3个问题&#xff1a; 为配置缓存检测具有数千个lambdas的类时出现MethodTooLargeException&#xff1b;用Gradle 8.1构建的Kotlin DSL预编译脚本插件不能用于其他版本的Gradle&#xff1b;Gradle 8.1在buil…...

C#开发的OpenRA游戏之基地工程车部署命令产生过程

C#开发的OpenRA游戏之基地工程车部署命令产生过程 OpenRA游戏里,前面已经分析基地工程车部署的流程, 但那只是一个框架的流程,只能理解大体的框架, 如果想要深入一步了解怎么样产生部署命令,还需继续探讨以下的代码。 基地工程车是先选中,然后再在基地工程车上面点击右…...

C++ 智能指针的原理、分类、使用

1. 智能指针介绍 为解决裸指针可能导致的内存泄漏问题。如&#xff1a; a&#xff09;忘记释放内存&#xff1b; b&#xff09;程序提前退出导致资源释放代码未执行到。 就出现了智能指针&#xff0c;能够做到资源的自动释放。 2. 智能指针的原理和简单实现 2.1 智能指针的原…...