POWERLINK protocol source code (latest) porting guide on stm32 microcontroller
POWERLINK protocol source code (latest) porting guide on stm32 microcontroller
Let me share the idea of transplanting the latest openPOWERLINK source code v2.7.2 on the single-chip microcomputer.
Using the backward deduction method (deriving the code files that need to be depended on from the compilation results), you can intuitively see the files related to platform differences. Therefore, transplantation is also very simple. Follow the following guidelines and you will be fine.
OpenPOWERLINK latest source address: openPOWERLINK :: openPOWERLINK
Powerlink is a good protocol, but most people in the country are going to use ethercat. I think there is nothing difficult about such a good protocol like powerlink. After you understand it, you will find it easier to use than the 485 bus. Before, there was too little information, and no one researched, promoted and shared it. I want to output a few more articles to share with you while I am in high spirits.
prerequisite
In order to successfully run the openPOWERLINK source code on the microcontroller, certain prerequisites are required. At least there must be an Ethernet function on the microcontroller board. As for whether it is necessary to have a tcp/ip protocol stack to run powerlink? This is not necessary, that is to say, even if there are only MCU+MAC+PHY chips on the MCU board, it is possible to not transplant the lwip protocol stack.
If the mcu core of the single-chip microcomputer covers the MAC link layer function, a PHY chip can be directly connected externally. This requires the single-chip microcomputer to have a mac interface. Generally, a slightly high-end single-chip microcomputer like the stm32F4 series or above has a mac function.
Media Access Control (MAC, Media Access Control), also known as Media Access Control, referred to as MAC, is the lower part of the data link layer in the local area network, providing address and media access control methods, so that different devices or nodes on the network can Communicate on a multi-point network without conflicting with each other. The above-mentioned characteristics are especially important in a local area network. In the early days of network development, MAC was used to determine the location of each network interface, but after the development of the Internet, IP was formulated and used. If it is only full-duplex communication between two devices, because the two devices can send and receive data at the same time, there will be no conflict, so there is no need to use the MAC protocol.
The media access control MAC sublayer is responsible for solving the problems related to media access and carrying out error-free communication on the basis of the physical layer.
The MAC sublayer is the interface between the network and the device. It receives data frames from the network layer, and then sends the data frames to the physical link through media access rules and the physical layer. It also receives data frames from the physical layer and sends them to the network layer. In general, MAC has three major functions:
1. Decide when a node sends a packet.
2. Send the data frame to the physical layer and then to the physical link.
3. Receive data frames from the physical layer and send them to the network layer for processing.
The most important of these is the first point: deciding when a node sends a packet. For each media access control technology, the rules used to control the sending timing of nodes are called media access rules. A node on a LAN cannot send data when it wants to, it can only send when it is its turn.
Only the MAC that comes with STM32 cannot do network communication, and an external Ethernet PHY chip is required. Just like RS485 communication, only one serial port is not enough, and an external RS485 PHY chip is also required.
PHY (Port Physical Layer), which can be called the port physical layer, is an abbreviation for the physical layer of the OSI model. Now commonly used in STM32 are DP83848, LAN8270, DM9161/9162, etc. These PHY chips are all similar, the basic registers are the same, only the extended registers are different from the registers specially set by the manufacturer. If the user successfully drives one of the PHYs, it is also very convenient to drive the other.
What if the low-end single-chip microcomputer has no MAC function? How to connect an external Ethernet chip? There are also ways, and now some manufacturers provide integrated modules, with built-in MAC and PHY chip functions, which can be accessed externally through the SPI interface. For example, the commonly used chip w5500 chip is a chip that integrates MAC and PHY functions, and can be accessed and used through the SPI interface. The SPI interface is a common interface that almost all high-end and low-end microcontrollers have. The W5500 chip is an embedded Ethernet controller integrated with a full hardware TCP/IP protocol stack, and it is also an industrial-grade Ethernet control chip. It is South Korea's WIZnet (Weizhi Nat) that released a full-hardware TCP/IP protocol stack Ethernet interface chip. W5500 supports high-speed standard 4-wire SPI interface to communicate with the host, and the SPI rate can theoretically reach 80MHz. Or the CH395 chip, which is also connected to the MCU through the SPI interface, is an Ethernet protocol stack management chip of Qinheng Company. CH395 chip comes with 10/100M Ethernet media transport layer (MAC) and physical layer (PHY), fully compatible with IEEE802.310/100M protocol, built-in PPPOE, IP, DHCP, ARP, ICMP, IGMP, UDP, TCP and other Ethernet Network protocol stack firmware.
To sum up, the source code of the POWERLINK protocol stack does not have high requirements for the single-chip microcomputer, and the general single-chip microcomputer can meet it, regardless of whether the single-chip microcomputer mcu has a MAC interface or not. The source code of the protocol stack is not very large, but of course the higher the performance of the mcu, the better.
In addition, the requirement for single-chip microcomputer is to have embedded operating systems such as Rtx, rtthread, freeRTOS or ucosII and other multi-tasking systems, so that it is easier to transplant and use. The embedded system preferably has a software timer function to facilitate the realization of the timer function of the user layer.
It should also be noted that if the MCU uses the interface provided by the third-party library to operate the Ethernet module, it is necessary to confirm whether the interface has the ability to directly operate and send mac frames. Because the link layer of powerlink does not use the tcp/ip protocol stack, it directly operates the mac message frame.
Introduction to mac frame mode
You can use the wireshark tool to capture packets to see if the sent mac frames are correct. The following is an example of the complete mac frame format of an arp protocol request packet:
//Ethernet header (14Byte)
0000: ff ff ff ff ff ff //目的主机为广播地址
0006: 84 c2 e4 f0 08 ef //源主机MAC地址为84-C2-E4-F0-08-EF
000c: 08 06 //上层协议类型0x0806表示ARP或RARP
//ARP请求(28Byte)
000e: 00 01 //硬件类型0x0001表示以太网
0010: 08 00 //协议类型0x0800表示IP协议
0012: 06 04 //MAC地址长度为6; IP地址长度为4
0014: 00 01 // op为0x0001表示请求目的主机的MAC地址
0016: 84 c2 e4 f0 08 ef //源主机MAC地址为00-1C-23-17-4A-CB
001c: c0 a8 01 65 //源主机IP地址(192.168.1.101)
0020: 00 00 00 00 00 00 //目的主机MAC地址未知,全0待填写
0026: c0 a8 01 67 //目的主机的IP地址(192.168.1.103)
//填充数据(18Byte)
002c: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
003c: 00 00
Or use a packet capture tool "Kelly Network Analysis System" to analyze the sent MAC frames. "Colasoft Network Analysis System" can be downloaded from the official website ( http://www.colasoft.com.cn/download/capsa.php ), and you can choose "Technical Exchange Version" to download. After downloading and installing, you can follow the prompts to register on their official website, and then the system will automatically send the registration code to our email.
For example, the following protocol type is 0x88AB mac frame of powerlink:
Migration Guide
The following first gives a compilation process log, which is the compilation process under the embedded linux environment of the POWERLINK protocol stack. Through the entire compilation process, it can be seen which file source codes are involved in the generation of the liboplkcn.a protocol stack library. (Note, the slave station and the master station use different protocol stack libraries, the protocol stack library of the slave station is liboplkcn.a, and the master station is liboplkmn.a)
Using the reverse derivation method and deriving backwards with the result as the guide, you can clearly see which interfaces must be implemented if you want to transplant it to a single-chip microcomputer.
Compilation log under linux
Slave protocol stack library compilation log
The following is the compilation log on the embedded linux platform, the slave protocol stack library liboplkcn.a:
-- CMAKE_SYSTEM_NAME is Linux
-- CMAKE_SYSTEM_PROCESSOR is arm
-- Adding CMAKE configuration options for Linux
-- Configuring oplkcn
-- Configuring done
-- Generating done
-- Build files have been written to: /root/test/powerlink/stack/build/arm-linux
root@hecs-287347:~/test/powerlink/stack/build/arm-linux# make
[ 1%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/generic.c.o
[ 2%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/processimage.c.o
[ 3%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/sdotest.c.o
[ 4%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/service.c.o
[ 6%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdu.c.o
[ 7%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdal.c.o
[ 8%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/dll/dllucal.c.o
[ 9%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/event/eventu.c.o
[ 10%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/nmtu.c.o
[ 12%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/nmtcnu.c.o
[ 13%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/nmtmnu.c.o
[ 14%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/identu.c.o
[ 15%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/statusu.c.o
[ 17%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/syncu.c.o
[ 18%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdou.c.o
[ 19%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdoucal.c.o
[ 20%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdoucal-triplebufshm.c.o
[ 21%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdotest-com.c.o
[ 23%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdotest-seq.c.o
[ 24%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocom-dummy.c.o
[ 25%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocom.c.o
[ 26%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocom-std.c.o
[ 28%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocomsrv.c.o
[ 29%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocomclt.c.o
[ 30%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoseq.c.o
[ 31%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoasnd.c.o
[ 32%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoudp.c.o
[ 34%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/timesync/timesyncu.c.o
[ 35%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/errhnd/errhndu.c.o
[ 36%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/ctrl/ctrlu.c.o
[ 37%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoudp-linux.c.o
[ 39%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/ctrl/ctrlucal-direct.c.o
[ 40%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/dll/dllucal-circbuf.c.o
[ 41%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/errhnd/errhnducal-local.c.o
[ 42%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/event/eventucal-linux.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/event/eventucalintf-circbuf.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdoucalmem-local.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/timesync/timesyncucal-local.c.o
[ 47%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/timer/timer-linuxuser.c.o
[ 48%] 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
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkevent.c.o
[ 53%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkframe.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllknode.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkcal.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/event/eventk.c.o
[ 58%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/nmt/nmtk.c.o
[ 59%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdok.c.o
[ 60%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdokcal.c.o
[ 62%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdokcal-triplebufshm.c.o
[ 63%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdoklut.c.o
[ 64%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/timesync/timesynck.c.o
[ 65%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/errhnd/errhndk.c.o
[ 67%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/errhnd/errhndkcal.c.o
[ 68%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/ctrl/ctrlk.c.o
[ 69%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/led/ledk.c.o
[ 70%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/led/ledktimer.c.o
[ 71%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/ctrl/ctrlkcal-direct.c.o
[ 73%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkcal-circbuf.c.o
[ 74%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/errhnd/errhndkcal-local.c.o
[ 75%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/event/eventkcal-linux.c.o
[ 76%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/event/eventkcalintf-circbuf.c.o
[ 78%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdokcalmem-local.c.o
[ 79%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/timesync/timesynckcal-local.c.o
[ 80%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/debugstr.c.o
[ 81%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/ftracedebug.c.o
[ 82%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/root/test/powerlink/contrib/trace/trace-printf.c.o
[ 84%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/target-linux.c.o
[ 85%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/target-mutex.c.o
[ 86%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/netif-linux.c.o
[ 87%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdconf-fileio.c.o
[ 89%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdconfcrc-generic.c.o
[ 90%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/circbuf/circbuffer.c.o
[ 91%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/circbuf/circbuf-posixshm.c.o
[ 92%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/memmap/memmap-null.c.o
[ 93%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/veth/veth-linuxuser.c.o
[ 95%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/timer/hrestimer-posix.c.o
[ 96%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/edrv/edrvcyclic.c.o
[ 97%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/edrv/edrv-rawsock_linux.c.o
[ 98%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/ami/ami.c.o
[100%] Linking C static library liboplkcn.a
[100%] Built target oplkcn
编译日志分析
从日志过程看,源码也不多嘛,因此到此处应该增加对移植成功的信心。
接下来分析,跟linux平台相关的源码有哪些?
重要的文件,src/kernel/edrv/edrv-rawsock_linux.c.o
这个是跟底层网络通信相关的核心驱动所在。
接下来的跟linux平台相关的还有:
src/kernel/veth/veth-linuxuser.c.o
src/arch/linux/target-linux.c.o
src/arch/linux/target-mutex.c.o
src/arch/linux/netif-linux.c.o
src/arch/linux/ftracedebug.c.o
src/kernel/event/eventkcal-linux.c.o
src/kernel/timer/hrestimer-posix.c.o
src/user/timer/timer-linuxuser.c.o
src/user/event/eventucal-linux.c.o
src/user/sdo/sdoudp-linux.c.o
就这些啦,看着像是很多?但是这里面其实有几个是不需要的,如sdoudp-linux.c,veth-linuxuser.c,
为何这两个文件不需要移植?先看下openPOWERLINK的代码架构框图:
图中标注的sdo接口部分似乎走了UDP协议,非得依赖tcp/ip协议栈?如果是使用了UDP那协议栈肯定是少不了了。
单片机上还得移植lwip协议栈?其实不用的,很简单。因为通过查看分析源码可以知道,虽然openPOWERLINK的sdo实现走了udp协议,但是这sdo发送接口是可配置的,它可以不使用udp发送,虽然看到的编译过程日志里有src/user/sdo/sdoudp-linux.c和src/user/sdo/sdoudp.c,但是CONFIG_INCLUDE_SDO_UDP这个配置并未启用。
sdoasnd.c,SDO over ASnd protocol,未配置CONFIG_INCLUDE_SDO_UDP,这样不走udp协议,则不需要非得有tcp/ip协议栈(当然单片机有tcp/ip协议栈也行,不影响) 。
src/kernel/veth/veth-linuxuser.c这个文件虽然编译日志里有它,但是实际也未用到。因为未启用CONFIG_INCLUDE_VETH这个宏定义。因此src/kernel/veth这个文件夹下的也可以略过。
最后剩下的涉及改动的文件,只有:
src/kernel/edrv/edrv-rawsock_linux.c.o
src/arch/linux/target-linux.co
src/arch/linux/target-mutex.co
src/arch/linux/netif-linux.co
src/arch/linux/ftracedebug.co
src/kernel/event/eventkcal-linux.co
src/kernel/timer/hrestimer-posix.c
src/user/timer/timer-linuxuser.co
src/user/event/eventucal-linux.co
Check again to see if it is still involved, and found that there is still a file src/common/circbuf/circbuf-posixshm.c
It is an implementation of a ring buffer, which seems to rely on the posix specification. If it is not available in the MCU environment, this is also easy to handle. Go to src/common/circbuf to see if there are other implementations, just find one and use it.
Others are similar, if you don’t know how to transplant, you can refer to the implementation of other platforms in the corresponding folder to follow the cat and draw the tiger, follow the gourd and draw the scoop, I believe it can be done.
Finally, extract the files involved in the above and use them in the microcontroller. With the slave library, as for application development, it is just to call the interface, it is as simple as that.
Analysis of Important Migration Files
The main files that need to be migrated are:
src/kernel/edrv/edrv-rawsock_linux.c //Link layer network frame communication
src/kernel/timer/hrestimer-posix.c // Implementation of high-precision timer
src/user/timer/timer-linuxuser.c //User layer timer
src/user/event/eventucal-linux.c //Implementation of event mechanism
Get the above four, basically not far from success.
For the implementation of high-precision timer and timer-linuxuser.c, please refer to the hrestimer-i210.c file, which uses a callback, and does not need to refer to the way the signal is passed to the thread in linux. If you use an embedded system, it is also good to transplant this part. For example, using the timer operation function provided by keil's rtx kernel system is also easy to implement.
eventucal-linux.c //The realization of the event mechanism, the amount of code itself is not much, and it can be realized by using the semaphore mechanism of the embedded kernel.
Then only edrv-rawsock_linux.c is left to debug the network interface.
Finally, test the demo_cn_console demo in the apps/ directory on the MCU to see if it can run and verify whether it is successful.
Migration files involved:
Code occupancy analysis: (including powerlink source code + RTX embedded system kernel)
RAM occupation: RW-data+ZI-data, 4204+53892, about 58K
ROM occupation: Code+Ro-data+Rw-data, about 80k
Attached:
Master station protocol stack library compilation log
The compilation log of the master protocol stack library (liboplkmn.a), you can refer to it if you need to transplant the master protocol stack library.
-- CMAKE_SYSTEM_NAME is Linux
-- CMAKE_SYSTEM_PROCESSOR is arm
-- Adding CMAKE configuration options for Linux
-- Configuring oplkmn
-- Configuring done
-- Generating done
-- Build files have been written to: /root/test/powerlink/stack/build/arm-linux
root@hecs-287347:~/test/powerlink/stack/build/arm-linux# make
[ 1%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/api/generic.c.o
[ 2%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/api/processimage.c.o
[ 3%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/api/sdotest.c.o
[ 4%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/api/service.c.o
[ 6%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/obd/obdu.c.o
[ 7%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/obd/obdal.c.o
[ 8%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/dll/dllucal.c.o
[ 9%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/event/eventu.c.o
[ 10%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/nmt/nmtu.c.o
[ 12%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/nmt/nmtcnu.c.o
[ 13%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/nmt/nmtmnu.c.o
[ 14%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/nmt/identu.c.o
[ 15%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/nmt/statusu.c.o
[ 17%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/nmt/syncu.c.o
[ 18%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/pdo/pdou.c.o
[ 19%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/pdo/pdoucal.c.o
[ 20%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/pdo/pdoucal-triplebufshm.c.o
[ 21%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdotest-com.c.o
[ 23%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdotest-seq.c.o
[ 24%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdocom-dummy.c.o
[ 25%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdocom.c.o
[ 26%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdocom-std.c.o
[ 28%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdocomsrv.c.o
[ 29%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdocomclt.c.o
[ 30%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdoseq.c.o
[ 31%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdoasnd.c.o
[ 32%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdoudp.c.o
[ 34%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/timesync/timesyncu.c.o
[ 35%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/errhnd/errhndu.c.o
[ 36%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/ctrl/ctrlu.c.o
[ 37%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/sdo/sdoudp-linux.c.o
[ 39%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/obd/obdcdc.c.o
[ 40%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/cfmu.c.o
[ 41%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/ctrl/ctrlucal-direct.c.o
[ 42%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/dll/dllucal-circbuf.c.o
[ 43%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/errhnd/errhnducal-local.c.o
[ 45%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/event/eventucal-linux.c.o
[ 46%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/event/eventucalintf-circbuf.c.o
[ 47%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/pdo/pdoucalmem-local.c.o
[ 48%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/timesync/timesyncucal-local.c.o
[ 50%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/user/timer/timer-linuxuser.c.o
[ 51%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/dll/dllk.c.o
[ 52%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/dll/dllkfilter.c.o
[ 53%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/dll/dllkstatemachine.c.o
[ 54%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/dll/dllkevent.c.o
[ 56%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/dll/dllkframe.c.o
[ 57%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/dll/dllknode.c.o
[ 58%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/dll/dllkcal.c.o
[ 59%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/event/eventk.c.o
[ 60%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/nmt/nmtk.c.o
[ 62%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/pdo/pdok.c.o
[ 63%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/pdo/pdokcal.c.o
[ 64%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/pdo/pdokcal-triplebufshm.c.o
[ 65%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/pdo/pdoklut.c.o
[ 67%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/timesync/timesynck.c.o
[ 68%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/errhnd/errhndk.c.o
[ 69%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/errhnd/errhndkcal.c.o
[ 70%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/ctrl/ctrlk.c.o
[ 71%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/led/ledk.c.o
[ 73%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/led/ledktimer.c.o
[ 74%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/ctrl/ctrlkcal-direct.c.o
[ 75%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/dll/dllkcal-circbuf.c.o
[ 76%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/errhnd/errhndkcal-local.c.o
[ 78%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/event/eventkcal-linux.c.o
[ 79%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/event/eventkcalintf-circbuf.c.o
[ 80%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/pdo/pdokcalmem-local.c.o
[ 81%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/timesync/timesynckcal-local.c.o
[ 82%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/common/debugstr.c.o
[ 84%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/arch/linux/ftracedebug.c.o
[ 85%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/root/test/powerlink/contrib/trace/trace-printf.c.o
[ 86%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/arch/linux/target-linux.c.o
[ 87%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/arch/linux/target-mutex.c.o
[ 89%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/arch/linux/netif-linux.c.o
[ 90%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/common/circbuf/circbuffer.c.o
[ 91%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/common/circbuf/circbuf-posixshm.c.o
[ 92%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/common/memmap/memmap-null.c.o
[ 93%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/veth/veth-linuxuser.c.o
[ 95%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/timer/hrestimer-posix.c.o
[ 96%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/edrv/edrvcyclic.c.o
[ 97%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/kernel/edrv/edrv-rawsock_linux.c.o
[ 98%] Building C object proj/linux/liboplkmn/CMakeFiles/oplkmn.dir/__/__/__/src/common/ami/ami.c.o
[100%] Linking C static library liboplkmn.a
[100%] Built target oplkmn
Compilation log under Windows
By the way, the compilation logs of the slave station and the master station protocol stack library under windows are also given, so that the differences can be compared with each other.
Slave library logs under Windows:
====================[ Build | oplkcn | Debug ]==================================
"D:\Program Files\JetBrains\CLion 2021.3.3\bin\cmake\win\bin\cmake.exe" --build E:\test\cpp\openPOWERLINK_V2.7.2\stack\cmake-build-debug --target oplkcn
[1/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\api\processimage.c.obj
[2/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\nmt\nmtu.c.obj
[3/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\api\sdotest.c.obj
[4/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\api\service.c.obj
[5/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\obd\obdal.c.obj
[6/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\api\generic.c.obj
[7/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\nmt\identu.c.obj
[8/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\obd\obdu.c.obj
[9/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\nmt\nmtmnu.c.obj
[10/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\event\eventu.c.obj
[11/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\nmt\nmtcnu.c.obj
[12/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\nmt\statusu.c.obj
[13/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\dll\dllucal.c.obj
[14/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdotest-com.c.obj
[15/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdotest-seq.c.obj
[16/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\pdo\pdoucal-triplebufshm.c.obj
[17/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdocom-dummy.c.obj
[18/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdocom.c.obj
[19/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\nmt\syncu.c.obj
[20/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\timesync\timesyncu.c.obj
[21/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\pdo\pdoucal.c.obj
[22/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdocom-std.c.obj
[23/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdocomclt.c.obj
[24/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdocomsrv.c.obj
[25/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\obd\obdconfcrc-generic.c.obj
[26/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\pdo\pdou.c.obj
[27/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdoseq.c.obj
[28/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\ctrl\ctrlu.c.obj
[29/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdoudp-windows.c.obj
[30/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\dll\dllucal-circbuf.c.obj
[31/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\dll\dllk.c.obj
[32/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\event\eventucalintf-circbuf.c.obj
[33/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\obd\obdconf-fileio.c.obj
[34/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\errhnd\errhndu.c.obj
[35/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\errhnd\errhnducal-local.c.obj
[36/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdoasnd.c.obj
[37/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\sdo\sdoudp.c.obj
[38/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\event\eventucal-win32.c.obj
[39/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\ctrl\ctrlucal-direct.c.obj
[40/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\pdo\pdoucalmem-local.c.obj
[41/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\dll\dllkstatemachine.c.obj
[42/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\dll\dllkfilter.c.obj
[43/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\timesync\timesyncucal-local.c.obj
[44/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\user\timer\timer-generic.c.obj
[45/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\event\eventk.c.obj
[46/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\dll\dllknode.c.obj
[47/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\nmt\nmtk.c.obj
[48/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\timesync\timesynck.c.obj
[49/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\pdo\pdoklut.c.obj
[50/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\pdo\pdokcal-triplebufshm.c.obj
[51/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\dll\dllkevent.c.obj
[52/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\dll\dllkcal.c.obj
[53/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\pdo\pdok.c.obj
[54/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\pdo\pdokcal.c.obj
[55/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\dll\dllkframe.c.obj
[56/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\errhnd\errhndk.c.obj
[57/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\led\ledk.c.obj
[58/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\errhnd\errhndkcal.c.obj
[59/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\ctrl\ctrlkcal-direct.c.obj
[60/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\ctrl\ctrlk.c.obj
[61/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\dll\dllkcal-circbuf.c.obj
[62/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\led\ledktimer.c.obj
[63/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\pdo\pdokcalmem-local.c.obj
[64/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\E_\test\cpp\openPOWERLINK_V2.7.2\contrib\trace\trace-windows.c.obj
[65/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\event\eventkcal-win32.c.obj
[66/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\arch\windows\target-windows.c.obj
[67/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\errhnd\errhndkcal-local.c.obj
[68/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\common\debugstr.c.obj
[69/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\common\memmap\memmap-null.c.obj
[70/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\arch\windows\target-mutex.c.obj
[71/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\timesync\timesynckcal-local.c.obj
[72/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\event\eventkcalintf-circbuf.c.obj
[73/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\edrv\edrvcyclic.c.obj
[74/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\timer\hrestimer-windows.c.obj
[75/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\kernel\edrv\edrv-pcap_win.c.obj
[76/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\arch\windows\netif-windows.c.obj
[77/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\common\circbuf\circbuf-win32.c.obj
[78/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\common\circbuf\circbuffer.c.obj
[79/80] Building C object proj\windows\liboplkcn\CMakeFiles\oplkcn.dir\__\__\__\src\common\ami\amix86.c.obj
[80/80] Linking C static library proj\windows\liboplkcn\oplkcn_d.lib
Build finished
The main station library log under Windows:
====================[ Build | oplkmn | Debug ]==================================
"D:\Program Files\JetBrains\CLion 2021.3.3\bin\cmake\win\bin\cmake.exe" --build E:\test\cpp\openPOWERLINK_V2.7.2\stack\cmake-build-debug --target oplkmn
[1/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\nmt\nmtcnu.c.obj
[2/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\obd\obdal.c.obj
[3/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\dll\dllucal.c.obj
[4/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\api\sdotest.c.obj
[5/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\event\eventu.c.obj
[6/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\nmt\identu.c.obj
[7/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\api\service.c.obj
[8/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\obd\obdu.c.obj
[9/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\api\generic.c.obj
[10/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\api\processimage.c.obj
[11/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\nmt\nmtu.c.obj
[12/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\nmt\nmtmnu.c.obj
[13/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\pdo\pdoucal-triplebufshm.c.obj
[14/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\nmt\statusu.c.obj
[15/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\pdo\pdoucal.c.obj
[16/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdoasnd.c.obj
[17/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdocom-dummy.c.obj
[18/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\nmt\syncu.c.obj
[19/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdocom.c.obj
[20/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdotest-seq.c.obj
[21/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdotest-com.c.obj
[22/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\pdo\pdou.c.obj
[23/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdoseq.c.obj
[24/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdocom-std.c.obj
[25/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdocomclt.c.obj
[26/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\timesync\timesyncu.c.obj
[27/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdoudp.c.obj
[28/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdocomsrv.c.obj
[29/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\sdo\sdoudp-windows.c.obj
[30/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\errhnd\errhndu.c.obj
[31/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\ctrl\ctrlucal-direct.c.obj
[32/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\cfmu.c.obj
[33/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\obd\obdcdc.c.obj
[34/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\event\eventucalintf-circbuf.c.obj
[35/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\dll\dllucal-circbuf.c.obj
[36/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\timesync\timesyncucal-local.c.obj
[37/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\pdo\pdoucalmem-local.c.obj
[38/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\errhnd\errhnducal-local.c.obj
[39/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\ctrl\ctrlu.c.obj
[40/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\event\eventucal-win32.c.obj
[41/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\user\timer\timer-generic.c.obj
[42/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\dll\dllk.c.obj
[43/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\dll\dllkstatemachine.c.obj
[44/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\nmt\nmtk.c.obj
[45/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\dll\dllkfilter.c.obj
[46/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\dll\dllknode.c.obj
[47/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\pdo\pdok.c.obj
[48/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\dll\dllkevent.c.obj
[49/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\dll\dllkframe.c.obj
[50/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\event\eventk.c.obj
[51/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\pdo\pdokcal.c.obj
[52/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\dll\dllkcal.c.obj
[53/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\pdo\pdokcal-triplebufshm.c.obj
[54/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\pdo\pdoklut.c.obj
[55/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\errhnd\errhndk.c.obj
[56/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\timesync\timesynck.c.obj
[57/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\ctrl\ctrlk.c.obj
[58/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\errhnd\errhndkcal.c.obj
[59/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\led\ledk.c.obj
[60/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\timesync\timesynckcal-local.c.obj
[61/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\timer\hrestimer-windows.c.obj
[62/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\E_\test\cpp\openPOWERLINK_V2.7.2\contrib\trace\trace-windows.c.obj
[63/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\event\eventkcal-win32.c.obj
[64/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\edrv\edrv-pcap_win.c.obj
[65/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\errhnd\errhndkcal-local.c.obj
[66/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\common\debugstr.c.obj
[67/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\edrv\edrvcyclic.c.obj
[68/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\event\eventkcalintf-circbuf.c.obj
[69/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\pdo\pdokcalmem-local.c.obj
[70/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\ctrl\ctrlkcal-direct.c.obj
[71/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\dll\dllkcal-circbuf.c.obj
[72/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\kernel\led\ledktimer.c.obj
[73/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\arch\windows\target-windows.c.obj
[74/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\arch\windows\target-mutex.c.obj
[75/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\common\circbuf\circbuffer.c.obj
[76/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\common\memmap\memmap-null.c.obj
[77/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\common\circbuf\circbuf-win32.c.obj
[78/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\arch\windows\netif-windows.c.obj
[79/80] Building C object proj\windows\liboplkmn\CMakeFiles\oplkmn.dir\__\__\__\src\common\ami\amix86.c.obj
[80/80] Linking C static library proj\windows\liboplkmn\oplkmn_d.lib
Build finished
Migration reference map
The transplant is complete, welcome to communicate.

