【Ethernet】車載ネットワーク その27【lwIP③】

車載ネットワーク

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/

スポンサーリンク

はじめに

lwIPをPC上で無理やりビルドした時の話。

スポンサーリンク

登場人物

博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

スポンサーリンク

とりあえずビルドが通るように

太郎くん
太郎くん

で、PC上でのlwIPのビルドは通った?

フクさん
フクさん

(完全に他力本願・・・。)

フクさん
フクさん

一応通ったよ。

太郎くん
太郎くん

おー。
以外とチョロかった感じ?

フクさん
フクさん

そうだね。
ちょこちょこ手を入れたと言えば入れたけど、
それほど悩むようなことはなかったねー。

スポンサーリンク

修正したところ

太郎くん
太郎くん

具体的には何を修正したの?

フクさん
フクさん

一応、diffを取ってみた。

diff U3B include/lwip/arch.h include/lwip/arch.h
--- include/lwip/arch.h	Fri Nov 23 04:57:02 2018
+++ include/lwip/arch.h	Tue Jan 14 21:30:50 2020
@@ -45,7 +45,7 @@
 #define BIG_ENDIAN 4321
 #endif
 
-#include "arch/cc.h"
+//#include "arch/cc.h"
 
 /**
  * @defgroup compiler_abstraction Compiler/platform abstraction
@@ -71,6 +71,7 @@
 #ifdef __DOXYGEN__
 #define LWIP_RAND() ((u32_t)rand())
 #endif
+#define LWIP_RAND() ((u32_t)rand())
 
 /** Platform specific diagnostic output.\n
  * Note the default implementation pulls in printf, which may
@@ -122,15 +123,15 @@
 #if !defined(LWIP_HAVE_INT64) && defined(UINT64_MAX)
 #define LWIP_HAVE_INT64 1
 #endif
-typedef uint8_t   u8_t;
-typedef int8_t    s8_t;
-typedef uint16_t  u16_t;
-typedef int16_t   s16_t;
-typedef uint32_t  u32_t;
-typedef int32_t   s32_t;
+typedef unsigned char   u8_t;
+typedef signed char    s8_t;
+typedef unsigned short  u16_t;
+typedef signed short   s16_t;
+typedef unsigned long  u32_t;
+typedef signed long   s32_t;
 #if LWIP_HAVE_INT64
-typedef uint64_t  u64_t;
-typedef int64_t   s64_t;
+typedef unsigned long long  u64_t;
+typedef signed long long   s64_t;
 #endif
 typedef uintptr_t mem_ptr_t;
 #endif
diff U3B netif/lowpan6.c netif/lowpan6.c
--- netif/lowpan6.c	Fri Nov 23 04:57:02 2018
+++ netif/lowpan6.c	Tue Jan 14 20:40:19 2020
@@ -679,7 +679,7 @@
     /* check for duplicate */
     lrh = lowpan6_data.reass_list;
     while (lrh != NULL) {
-      uint8_t discard = 0;
+      unsigned char discard = 0;
       lrh_next = lrh->next_packet;
       if ((lrh->sender_addr.addr_len == src.addr_len) &&
           (memcmp(lrh->sender_addr.addr, src.addr, src.addr_len) == 0)) {
diff U3B netif/lowpan6_ble.c netif/lowpan6_ble.c
--- netif/lowpan6_ble.c	Fri Nov 23 04:57:02 2018
+++ netif/lowpan6_ble.c	Tue Jan 14 20:40:11 2020
@@ -107,7 +107,7 @@
  * @see LWIP_RFC7668_LINUX_WORKAROUND_PUBLIC_ADDRESS
  */
 void
-ble_addr_to_eui64(uint8_t *dst, const uint8_t *src, int public_addr)
+ble_addr_to_eui64(unsigned char *dst, const unsigned char *src, int public_addr)
 {
   /* according to RFC7668 ch 3.2.2. */
   memcpy(dst, src, 3);
@@ -136,7 +136,7 @@
  * 
  */
 void
-eui64_to_ble_addr(uint8_t *dst, const uint8_t *src)
+eui64_to_ble_addr(unsigned char *dst, const unsigned char *src)
 {
   /* according to RFC7668 ch 3.2.2. */
   memcpy(dst,src,3);
スポンサーリンク

修正箇所説明

フクさん
フクさん

ざっと説明すると、

  • arch/cc.hは無いのでコメントアウト
  • arch/cc.hに記載されてると思われるuint8_t、int8_t…int64_tの辻褄合わせ

だね。

太郎くん
太郎くん

arch/cc.hってなんだろね?

フクさん
フクさん

たぶん、環境依存部のCコンパイラ依存の辻褄合わせ用のヘッダだと思う。
今回も独自のarch/cc.hを作るべきだったのかもしれないが、
それほど修正範囲も広くなかったので、
作らないパターンでやってみた。

太郎くん
太郎くん

コンパイラ依存かー。
いろいろ考えられてるもんだねー。

フクさん
フクさん

じゃー、次回は実際にlwIPを初期化したり制御したりのコードの話になるかなー。

スポンサーリンク

まとめ

フクさん
フクさん

まとめだよ。

  • lwIPをPC上でビルドした。
  • 修正はarch/cc.hに起因するもの。
    • arch/cc.hはコンパイラ依存部の辻褄合わせようのヘッダファイル。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました