【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をコピーしました