[Armadillo:08627] Re: CAN通信サンプルのPF_CAN宣言について

Yamamoto email@hidden
2013年 2月 24日 (日) 23:27:13 JST


花田さんへ

遅くなりました。
有難うございます。

理由が解らないと気になるもので、助かりました。

On Thu, 21 Feb 2013 18:52:27 +0900
Masahiro Hanada <email@hidden> wrote:

> 花田です。
> 
> At 19 Feb 2013 15:44:51 +0900 Yamamoto wrote:
> > サンプルから作成したプログラムをそのまま、makeすると"PF_CAN","AF_CAN"が宣言され
> > ていないとエラーになります。
> > 検索したところsocket.hにて宣言があり#includeもしているのですがエラーになります。
> 
> ATDE3では…
> 
> /usr/arm-linux-gnueabi/include/linux/socket.h
>  19> #if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
> 184> #define AF_CAN		29	/* Controller Area Network      */
> 220> #define PF_CAN		AF_CAN
> 297> #endif /* not kernel and not glibc */
> 
> となっているので、glibcを使っている(かつバージョンが2以上)時は
> AF_CANとPF_CANの定義が有効にならないみたいですね。
> 
> ↓こんな感じコンパイルして実行したら、「2」と表示されるはずです。
> ---
> #include <stdio.h>
> int main(void) {
> #ifdef __GLIBC__
> 	printf("%d\n", __GLIBC__);
> #endif
> 	return 0;
> }
> ---
> 
> > サンプルのMakefileを再確認したところコンパイルフラグに下記が追加されていました。
> > CFLAGS += -DSO_RXQ_OVFL=40 -DPF_CAN=29 -DAF_CAN=PF_CAN
> > 上記をMakefileに追加するとコンパイルエラーは無くなりました。
> 
> 上記の理由から、glibcを使うアプリケーションからのAF_CANとPF_CAN定義は
> (コンパイルオプションで渡すなど)自力で定義するしかないようです。
> 
> ついでなので、新しいバージョン(wheezyを使ったATDE5レベル)で調べてみました。
> AF_CANとPF_CANの定義が
> /usr/arm-linux-gnueabihf/include/bits/socket.h
> に移ってます。
> このヘッダは直接includeすることを禁止されていて、
> 代わりに<sys/socket.h>を使うのですが、この場合ですと
> glibcを使ったアプリケーションでもPF_CANとAF_CANを使うことができました。
> 
> 経緯はちゃんと追ってませんが、
> <linux/socket.h>から<bits/socket.h>に移った後の環境からのみ、
> PF_CANやAF_CANの定義をヘッダに頼ることができるようになったようですね。
> 
> ということで…互換性を考えると、Wikipedia
> 
> SocketCAN - Wikipedia, the free encyclopedia
> http://en.wikipedia.org/wiki/SocketCAN
> 
> にもあるように、Cソース内で
> > /* At time of writing, these constants are not defined in the headers */
> > #ifndef PF_CAN
> > #define PF_CAN 29
> > #endif
> >  
> > #ifndef AF_CAN
> > #define AF_CAN PF_CAN
> > #endif
> という風に定義する方が、より良いかもしれません。
> 
> ____________________________________________________
> 
>     花田 政弘 (はなだ まさひろ)
> 
>       (株)アットマークテクノ 開発部
>         TEL: 011-207-6550    FAX: 011-207-6570
>         URL: http://www.atmark-techno.com/
> 
>     E-mail: email@hidden
> ____________________________________________________
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo

(^_^)v(^_^)/~(^_^)v(^_^)/~
     山本 伸夫
   email@hidden
(^_^)/~(^_^)v(^_^)/~(^_^)v




armadillo メーリングリストの案内