RX65Nでプログラムが大きくなるとイーサネットが動作しくなる

開発環境:e2 studio (Version: 2023-01 (23.1.0))
Toolchains:GCC for Renesas RX - 8.3.0.202204

FITDemosのrskrx65n_2mb_udp_nonblockingを参考にUDPのエコーサーバーを作成しました。
r_t4_rxのDHCPはEnableに設定しており、正常にIPが割り当てられエコーサーバーも正常に動作していました。

このアプリに.h、.cファイルを追加していき、プログラムが大きくなってくると、ある時からイーサネットの機能が動かなくなりました。
具体的にはDHCPのDiscoveryが送信されなくなりました。
この時イーサネットの開始に必要な以下の処理は成功しています。
lan_open() →成功
tcpudp_get_ramsize() →バッファサイズ正常
tcpudp_open() →成功
また、メインループは正常に動いていている(LED点滅)ことを確認しています。
(.h、.cを削除して処理を削ると、また正常に動作するようになります)

イーサネットが機能しなくなる件について、情報をお持ちであったり、心当たりがある方がいらっしゃいましたら教えていただけると幸いです。
よろしくお願いします。

Parents
  • キャンディさんこんにちは。

    以前に実装して、長らく使っていなかった、RX71M の Ethernet 自前のアプリを自分も試してみました。(T4ライブラリ利用)

    Toolchain: rx-elf-gcc.exe (GCC_Build_20200327) 8.3.0.202002-GNURX 20190222

    アプリはHTTPサーバーで、前は動作していたと思うのですが、DHCP の取得でタイムアウトします。

    アプリは、DHCP がタイムアウトすると、指定の IP アドレス(192.168.0.20)を設定するような実装になっています。

    ping は loss=0 で通るのですが、HTTPサーバーは動作していません。

    テストしたソースはかなり古く、周辺のコードが改修された為、その影響によるのかもしれません。(現在調査中)

    もう少し調べてみますが、DHCP が取得出来ない不具合が同じなのが気になります・・、何か進展がありましたら、自分もポストします。

    http://www.rvf-rc45.net/wordpress/?p=3023

    ※上記ブログ記事は、gcc-6.4.0 を自分でビルドして利用していた頃のものです。

    ---

    自分は、ドライバーのソースを修正して、EDMAC(イーサーネット専用DMAC)のメモリアドレスが32バイト境界になるようにしています。

    元ソースは、EDMAC が使う構造体に専用のセクションを割り当てて、必ず32バイト境界になるような実装だったと思います。

  • こんにちは、みなさん~

    進展がありましたので報告します。

    ---

    まず、DHCP が取れないのは、自分のフレームワークを色々更新する過程で、Ethernet のポート設定を間違っていた為で、それに気がつき、修正した処、DHCP の取得は出来るようになりました。

    それで、DHCP で取得した IP 192.168.0.10 に対して、ping のテストをしても、タイムアウトで通信出来ません。

    次に、GNU-RX のツールを、自前でビルドした、gcc-6.4.0 に戻して、フルコンパイルしました。

    すると、今度は、通信出来るようになり、HTTP サーバーへの接続も可能になりました。

    非常に不思議な現象で、GNU-RX gcc-8.3.0 でコンパイルすると通信出来ず、gcc-6.4.0 ならちゃんと動作します。

    binutils-2.30, gcc-6.4.0, newlib-2.4.0 ---> OK

    binutils-2.34, gcc-7.5.0, newlib-2.4.0 ---> OK

    上記の組み合わせで動作を確認しています。

    この現象は、前に経験があり、その時は、以下の組み合わせで NG でした。

    binutils-2.30, gcc-6.4.0, newlib-3.0.0 ---> NG

    GNU-RX 8.3.0 は以下の組み合わせのようです。
    • binutils-2.24
    • gcc-8.3.0
    • newlib-3.1.0

    何故動作しなくなるのか、詳しく調べていませんが、現状、そのような状態です。

    ---

    引き続き調査をします。

Reply
  • こんにちは、みなさん~

    進展がありましたので報告します。

    ---

    まず、DHCP が取れないのは、自分のフレームワークを色々更新する過程で、Ethernet のポート設定を間違っていた為で、それに気がつき、修正した処、DHCP の取得は出来るようになりました。

    それで、DHCP で取得した IP 192.168.0.10 に対して、ping のテストをしても、タイムアウトで通信出来ません。

    次に、GNU-RX のツールを、自前でビルドした、gcc-6.4.0 に戻して、フルコンパイルしました。

    すると、今度は、通信出来るようになり、HTTP サーバーへの接続も可能になりました。

    非常に不思議な現象で、GNU-RX gcc-8.3.0 でコンパイルすると通信出来ず、gcc-6.4.0 ならちゃんと動作します。

    binutils-2.30, gcc-6.4.0, newlib-2.4.0 ---> OK

    binutils-2.34, gcc-7.5.0, newlib-2.4.0 ---> OK

    上記の組み合わせで動作を確認しています。

    この現象は、前に経験があり、その時は、以下の組み合わせで NG でした。

    binutils-2.30, gcc-6.4.0, newlib-3.0.0 ---> NG

    GNU-RX 8.3.0 は以下の組み合わせのようです。
    • binutils-2.24
    • gcc-8.3.0
    • newlib-3.1.0

    何故動作しなくなるのか、詳しく調べていませんが、現状、そのような状態です。

    ---

    引き続き調査をします。

Children
No Data