stm32 マイクロコントローラーの POWERLINK プロトコル ソース コード (最新) 移植ガイド

最近パワーリンクを手に入れたのですが、ここ数日連続で12時前に寝ていません。興味が強すぎて眠れなくなると言わざるを得ません。POWERLINK を勉強するのが好きです。最新バージョンのソース コード構造は非常に明確です。スレーブ ステーションとコンピュータのマスター ステーション間の通信として組み込み Linux を移植してテストするのは非常に興味深いです。次はシングルチップマイコンへの移植を試みて、POWERLINKプロトコルの利用の敷居を下げ、POWERLINKプロトコルをもっと普及させていきたいと考えています。これは意味のあることです。

最新のopenPOWERLINKソースコードv2.7.2をシングルチップマイコンに移植するアイデアを共有しましょう。

後方推論法(コンパイル結果から依存する必要があるコードファイルを導出する方法)を使用することで、プラットフォームの違いに関連するファイルを直感的に確認できます。したがって、移植も非常に簡単で、以下のガイドラインに従えば問題ありません。

OpenPOWERLINK の最新ソース アドレス: openPOWERLINK :: openPOWERLINK

Powerlink は優れたプロトコルですが、国内のほとんどの人は ethercat を使用するでしょう。powerlink のような優れたプロトコルには難しいことは何もなく、理解すれば 485 バスよりも使いやすいことが分かると思います。以前は情報が少なすぎて誰も調べたり宣伝したり共有したりしなかったので、元気なうちにもう少し記事をアウトプットして皆さんと共有したいと思います。

前提条件

マイクロコントローラー上で openPOWERLINK ソース コードを正常に実行するには、特定の前提条件が必要です。少なくともマイクロコントローラーボードにはイーサネット機能が必要です。powerlink を実行するには tcp/ip プロトコル スタックが必要かというと、これは必要ありません。つまり、MCU ボード上に MCU+MAC+PHY チップしかない場合でも、移植しないことは可能です。 lwip プロトコル スタック。

シングルチップマイコンのmcuコアがMACリンク層の機能をカバーしていれば、PHYチップを外部に直接接続することができます。そのためにはシングルチップマイコンがmacインターフェースを持っている必要があり、stm32F4シリーズ以降の少し高級なシングルチップマイコンにはmac機能が搭載されているのが一般的です。

メディア アクセス コントロール (MAC、メディア アクセス コントロール) は、メディア アクセス コントロールとも呼ばれ、MAC とも呼ばれ、ローカル エリア ネットワークのデータ リンク層の下位部分であり、アドレスとメディア アクセス制御方法を提供し、さまざまなデバイスがネットワーク上のノードは、相互に競合することなくマルチポイント ネットワーク上で通信できます。上記の特性は、ローカル エリア ネットワークでは特に重要です。ネットワーク開発の初期には、各ネットワーク インターフェイスの位置を決定するために MAC が使用されていましたが、インターネットの開発後は IP が策定されて使用されるようになりました。2 つのデバイス間の全二重通信のみの場合、2 つのデバイスは同時にデータを送受信できるため競合は発生しないため、MAC プロトコルを使用する必要はありません。

メディア アクセス制御 MAC サブレイヤは、物理層に基づいてメディア アクセスに関する問題を解決し、エラーのない通信を実行する役割を果たします。

MAC サブレイヤはネットワークとデバイス間のインターフェイスであり、ネットワーク層からデータ フレームを受信し、メディア アクセス ルールと物理層を通じてデータ フレームを物理リンクに送信します。また、物理層からデータ フレームを受信し、ネットワーク層に送信します。一般に、MAC には 3 つの主要な機能があります。

1. ノードがいつパケットを送信するかを決定します。
2. データ フレームを物理層に送信し、次に物理リンクに送信します。
3. 物理層からデータ フレームを受信し、処理のためにネットワーク層に送信します。
これらの中で最も重要なのは、最初の点、つまりノードがいつパケットを送信するかを決定することです。メディアアクセス制御技術ごとに、ノードの送信タイミングを制御するためのルールをメディアアクセスルールと呼びます。LAN 上のノードは、データを送信したいときに送信できず、順番が来たときにのみ送信できます。

STM32に付属するMACだけではネットワーク通信ができないため、外部のイーサネットPHYチップが必要ですが、RS485通信と同様、シリアルポートが1つだけでは不十分で、外部のRS485 PHYチップも必要です。

PHY(Port Physical Layer)はポート物理層とも言え、OSIモデルの物理層の略称です。現在、STM32 で一般的に使用されているのは、DP83848、LAN8270、DM9161/9162 などです。これらの PHY チップはすべて類似しており、基本レジスタは同じですが、拡張レジスタだけがメーカーによって特別に設定されたレジスタとは異なります。ユーザーが PHY の 1 つを正常に駆動した場合、もう 1 つの PHY を駆動することも非常に便利です。

ローエンドのワンチップマイコンにMAC機能がなかったらどうなるでしょうか?外部イーサネットチップを接続するにはどうすればよいですか? 方法もあり、現在一部のメーカーは、SPI インターフェイスを介して外部からアクセスできる、MAC および PHY チップ機能を内蔵した統合モジュールを提供しています。たとえば、一般的に使用されているチップ w5500 チップは、MAC 機能と PHY 機能を統合したチップであり、SPI インターフェイスを介してアクセスして使用できます。SPI インターフェイスは、ほとんどすべてのハイエンドおよびローエンドのマイクロコントローラーが備えている共通のインターフェイスです。W5500 チップは、完全なハードウェア TCP/IP プロトコル スタックと統合された組み込みイーサネット コントローラーであり、産業グレードのイーサネット制御チップでもあります。フルハードウェアの TCP/IP プロトコル スタック イーサネット インターフェイス チップをリリースしたのは、韓国の WIZnet (Weizhi Nat) です。W5500 は、ホストと通信するための高速標準 4 線式 SPI インターフェイスをサポートしており、SPI レートは理論的には 80MHz に達します。または、SPI インターフェイスを介して MCU に接続されている CH395 チップは、Qinheng Company のイーサネット プロトコル スタック管理チップです。CH395 チップには、10/100M イーサネット メディア トランスポート層 (MAC) および物理層 (PHY) が搭載されており、IEEE802.310/100M プロトコルと完全に互換性があり、内蔵 PPPOE、IP、DHCP、ARP、ICMP、IGMP、UDP、TCP、およびその他のイーサネット ネットワーク プロトコル スタック ファームウェア。

 まとめると、POWERLINK プロトコル スタックのソース コードにはシングルチップ マイコンに対する高い要件はなく、シングルチップ マイコン MCU の MAC インターフェイスの有無に関係なく、一般的なシングルチップ マイコンであれば満たすことができます。 。プロトコルスタックのソースコードはそれほど大きくありませんが、当然ながら MCU の性能が高いほど優れています。

さらに、シングルチップマイクロコンピュータの要件は、移植と使用を容易にするために、Rtx、rtthread、freeRTOS、ucosII などのオペレーティングシステムやその他のマルチタスクシステムを組み込むことです。組み込みシステムは、ユーザ層のタイマー機能の実現を容易にするために、ソフトウェアタイマー機能を有することが好ましい。

また、MCU がイーサネット モジュールを操作するためにサードパーティのライブラリが提供するインターフェイスを使用する場合、そのインターフェイスが Mac フレームを直接操作して送信する機能があるかどうかを確認する必要があることに注意してください。powerlink のリンク層は tcp/ip プロトコル スタックを使用しないため、mac メッセージ フレームを直接操作します。

ここに画像の説明を挿入

mac フレーム モードの概要

Wireshark ツールを使用してパケットをキャプチャし、送信された MAC フレームが正しいかどうかを確認できます。以下は、arp プロトコル要求パケットの完全な MAC フレーム形式の例です。

//イーサネットヘッダ(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

または、パケットキャプチャツール「Kelly Network Analysis System」を使用して、送信されたMACフレームを分析します。「Colaso​​ft Network Analysis System」は公式サイト(http://www.colaso​​ft.com.cn/download/capsa.php)からダウンロードでき、「技術交換版」を選択してダウンロードできます。ダウンロードしてインストールした後、プロンプトに従って公式 Web サイトに登録すると、システムから登録コードが当社の電子メールに自動的に送信されます。

たとえば、次のプロトコル タイプは powerlink の 0x88AB mac フレームです。

移行ガイド

次に、まずコンパイル プロセス ログを示します。これは、POWERLINK プロトコル スタックの組み込み Linux 環境でのコンパイル プロセスです。コンパイル プロセス全体を通して、どのファイル ソース コードが liboplkcn.a プロトコル スタック ライブラリの生成に関与しているかを確認できます。(スレーブ局とマスタ局は異なるプロトコルスタックライブラリを使用していることに注意してください。スレーブ局のプロトコルスタックライブラリはliboplkcn.a、マスタ局はlibopplkmn.aです)

逆導出法を用いて、その結果をガイドにして逆に導出することで、シングルチップマイコンに移植する場合にどのインタフェースを実装する必要があるかが一目瞭然です。

Linux でのコンパイル ログ

スレーブプロトコルスタックライブラリのコンパイルログ

以下は、組み込み Linux プラットフォーム、スレーブ プロトコル スタック ライブラリ 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.co
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.co

src/user/timer/timer-linuxuser.co

src/user/event/eventucal-linux.co

src/user/sdo/sdoudp-linux.co

それだけです、たくさんあるように見えますか?しかし実際には、sdoudp-linux.c、veth-linuxuser.c、

これら 2 つのファイルを移行する必要がないのはなぜですか? まず、openPOWERLINK のコード アーキテクチャ ブロック図を見てください。

 図でマークされている sdo インターフェイスは UDP プロトコルを使用しているようですので、tcp/ip プロトコル スタックに依存する必要がありますか? UDPを使用する場合はプロトコルスタックが必須となります。

lwip プロトコル スタックをマイクロコントローラーに移植する必要がありますか? 実際、その必要はなく、非常に簡単です。ソース コードを表示して分析すると、openPOWERLINK の sdo 実装では udp プロトコルが採用されていますが、sdo 送信インターフェイスは構成可能であり、src/user/sdo/sdoudp があっても udp を使用せずに送信できることがわかります。 -linux.c および src/user/sdo/sdoudp.c ですが、CONFIG_INCLUDE_SDO_UDP構成は有効になっていません。

ASnd プロトコル上の SDO である sdoasnd.c は、 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.co

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

まだ関係しているかどうかをもう一度確認すると、src/common/circbuf/circbuf-posixshm.c ファイルがまだ存在していることがわかりました。

これはリングバッファの実装であり、posix 仕様に依存しているようです。MCU 環境で利用できない場合でも、src/common/circbuf にアクセスして他の実装があるかどうかを確認し、見つけて使用するだけです。

他も同様です。移植方法がわからない場合は、対応するフォルダー内の他のプラットフォームの実装を参照して、猫を追いかけて虎を描き、ひょうたんを追いかけてスコップを描くことができると思います。

最後に上記に関係するファイルを解凍してシングルチップマイコン内で使用しますが、スレーブライブラリを使えばアプリケーション開発はインターフェースを呼び出すだけで簡単です。

重要な移行ファイルの分析

移行する必要がある主なファイルは次のとおりです。

src/kernel/edrv/edrv-rawsock_linux.c //リンク層ネットワークフレーム通信

src/kernel/timer/hrestimer-posix.c // 高精度タイマーの実装

src/user/timer/timer-linuxuser.c //ユーザー層タイマー

src/user/event/eventucal-linux.c //イベント機構の実装

上記の 4 つを取得すれば、基本的には成功から遠くありません。

高精度タイマーと timer-linuxuser.c の実装については、 hrestimer-i210.c ファイルを参照してください。このファイルはコールバックを使用し、Linux でシグナルがスレッドに渡される方法を参照する必要はありません。 。組み込みシステムを使用する場合は、この部分を移植するのも良いでしょう。例えば、keilのrtxカーネルシステムが提供するタイマー動作機能を利用することも簡単に実現できます。

evenucal-linux.c //イベント機構の実現、コード自体の量はそれほど多くなく、組み込みカーネルのセマフォ機構を利用することで実現可能です。

その後、ネットワーク インターフェイスをデバッグするために edrv-rawsock_linux.c だけが残ります。

最後に、MCU の apps/ ディレクトリにある demo_cn_console デモをテストして、実行できるかどうかを確認し、成功するかどうかを確認します。

関連する移行ファイル:

コード占有分析: (powerlink ソース コード + RTX 組み込みシステム カーネルを含む)

RAM占有量:RWデータ+ZIデータ、4204+53892、約58K

ROM占有量:コード+Roデータ+Rwデータ、約80k

添付:

マスタ局プロトコルスタックライブラリ編集ログ

マスター プロトコル スタック ライブラリ (liboplkmn.a) のコンパイル ログ。マスター プロトコル スタック ライブラリを移植する必要がある場合に参照できます。

-- 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

Windows でのコンパイル ログ

ちなみに、スレーブ局とマスタ局のプロトコルスタックライブラリのWindows上のコンパイルログも掲載しており、相違点を比較することができます。

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

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

移行リファレンスマップ

 移植は完了しました。連絡を歓迎します。

その他のリソース

openPOWERLINK: openPOWERLINK

openPOWERLINK: openPOWERLINK 移植ガイド

イーサネット、FPGA はシリーズの MACRAW モードで ARP リクエストを確実に処理できるようになります - ブレッドボード コミュニティ

おすすめ

転載: blog.csdn.net/qq8864/article/details/130648388