バックナンバーはこちら。
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はコンパイラ依存部の辻褄合わせようのヘッダファイル。
バックナンバーはこちら。
コメント