Renesas TCP/IP stack T4 (libT4_XXXX.a)を最近のnewer GNURXでbuildする対処法を探してみた

こんにちは。NoMaYです。

最近、以下のスレッドに関わって知ったのですが、ルネサスさんのTCP/IPスタックT4のバイナリライブラリ(元ソースもRXスマートコンフィグレータにて提供される)が以下の画面コピーのT4のドキュメント記載の事情によりビルド出来ないことを知りました。そこで対処法を試行錯誤してみました。

続く。

FreeRTOSとr_t4_rxを使用した際のビルドエラーについて(RX72N)
japan.renesasrulz.com/cafe_rene/forums-groups/beginners/f/002-2095199602/8335/freertos-r_t4_rx-rx72n/42982#42982

ところで脱線しますけれども、T4のドキュメントの以下の制限事項ですが、エラーは発生するのでしょうか?


RX SmartConfiguratorで気になった点とか改善する案とか報告してみるスレッド
japan.renesasrulz.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/7536/rx-smartconfigurator/43222#43222

ビルドエラーが発生するのはT4のライブラリ(r_t4_rx/make_lib/make_lib.zip の中にライブラリソースと作成用プロジェクトが入っています)を自前で作成する時です。


以下、T4のドキュメントの画面コピーです。


 

Parents
  • こんにちは。NoMaYです。

    2重定義になっているin_addr_tという型は以下になります。なお、Google検索すると業界標準は、構造体/共用体による定義ではなく、プレーンな32ビット整数型による定義の方のようです。

    T4側

    typedef struct _in_addr
    {
        union
        {
            struct
            {
                uint8_t     s_b1;
                uint8_t     s_b2;
                uint8_t     s_b3;
                uint8_t     s_b4;
            } S_un_b;
            struct
            {
                uint16_t    s_w1;
                uint16_t    s_w2;
            } S_un_w;
            uint32_t        S_addr;
        } S_un;
    } in_addr_t;

     
    GCC側

    #if __BSD_VISIBLE
    #include <machine/endian.h>
    #include <sys/select.h>
    #  define   physadr     physadr_t
    #  define   quad        quad_t

    #ifndef _IN_ADDR_T_DECLARED
    typedef __uint32_t  in_addr_t;  /* base type for internet address */
    #define _IN_ADDR_T_DECLARED
    #endif

    #ifndef _IN_PORT_T_DECLARED
    typedef __uint16_t  in_port_t;
    #define _IN_PORT_T_DECLARED
    #endif

    typedef __uintptr_t u_register_t;
    #endif /* __BSD_VISIBLE */

     
    Google検索: in_addr_t
    www.google.com/search?q=in_addr_t

    続く。

Reply
  • こんにちは。NoMaYです。

    2重定義になっているin_addr_tという型は以下になります。なお、Google検索すると業界標準は、構造体/共用体による定義ではなく、プレーンな32ビット整数型による定義の方のようです。

    T4側

    typedef struct _in_addr
    {
        union
        {
            struct
            {
                uint8_t     s_b1;
                uint8_t     s_b2;
                uint8_t     s_b3;
                uint8_t     s_b4;
            } S_un_b;
            struct
            {
                uint16_t    s_w1;
                uint16_t    s_w2;
            } S_un_w;
            uint32_t        S_addr;
        } S_un;
    } in_addr_t;

     
    GCC側

    #if __BSD_VISIBLE
    #include <machine/endian.h>
    #include <sys/select.h>
    #  define   physadr     physadr_t
    #  define   quad        quad_t

    #ifndef _IN_ADDR_T_DECLARED
    typedef __uint32_t  in_addr_t;  /* base type for internet address */
    #define _IN_ADDR_T_DECLARED
    #endif

    #ifndef _IN_PORT_T_DECLARED
    typedef __uint16_t  in_port_t;
    #define _IN_PORT_T_DECLARED
    #endif

    typedef __uintptr_t u_register_t;
    #endif /* __BSD_VISIBLE */

     
    Google検索: in_addr_t
    www.google.com/search?q=in_addr_t

    続く。

Children
No Data