GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
桜ライブラリ V1.08を使用して作成したユニットが、あるネットワーク環境でだけ通信が途切れてしまうという現象に見舞われております。
その現場が海外であることもあり、原因の追及が思うようにできていない中、とりあえず最新のライブラリ用に内容を組み替えて
テストをしてもらおうかと思っているのですが、過去の質問の中で気になるものがありました。
Ethernetで送受信が出来なくなる - GR-SAKURA フォーラム - がじぇっとるねさすコミュニティ - Renesas Rulz
他でこういうことが起こりえる以上、実際に問題が起こっている環境でも再発する可能性があるため
せめてPHYが停止したときにハードウェアをリブートする処理をつけたいのですが、シェルティ様の回答の中にある
_phy_read()関数の呼び方がわかりません。
IDE for GR 1.13のフォルダの内容を探したところ、Phy_GetLinkStatus()関数で読み出せるのではないかと
思ったのですが、
--
#include <phy.h>
void loop() {
-中略-
int x = Phy_GetLinkStatus();
}
としてビルトすると、
CMU_v1100beta.cpp.o: In function `loop':CMU_v1100beta.cpp:(.text.loop+0x3b): undefined reference to `Phy_GetLinkStatus()'CMU_v1100beta.cpp:(.text.loop+0x61): undefined reference to `Phy_GetLinkStatus()'
という結果になります。
PHYのステータスの正しい読み出し方はどういうものになるのか教えて頂けないでしょうか?
ムックさん
こんにちは、シェルティです。
C++からCを呼び出すときは細工が必要ですね。
https://www.ibm.com/docs/ja/zos/2.3.0?topic=dcci-declaration-c-calling-c
以下でビルドまで確認できました。
/* GR-SAKURA Sketch Template V2.23 */#include <Arduino.h>
#define INTERVAL 100
extern "C" { int16_t Phy_GetLinkStatus(void);}
void setup(){ pinMode(PIN_LED0,OUTPUT); pinMode(PIN_LED1,OUTPUT); pinMode(PIN_LED2,OUTPUT); pinMode(PIN_LED3,OUTPUT);
}
void loop(){ int16_t link_stat; : (略) : link_stat = Phy_GetLinkStatus();}
以上です
シェルティ様
回答有難う御座いました。こちらでもビルドできることが確認できました。
ユニットのリセットに絡ませる処理を入れる検討をしたいと思います。
1つわからないのですが、このPhy_GetLinkStatus()関数は
GR-SAKURAではLAN8720AIのBasicStatusRegister bit2 が1なら0が、
0なら -1 が返るのだと思います。
以前の
にてシェルティ様が書かれておりました、
> ステータスレジスタが全く読めない状態に陥ってしまっていれば、
という事態になっている場合に、Phy_GetLinsStatus()を実行すると
どうなるのでしょうか。
タイムアウトの処理をこちらで設ける必要があるでしょうか。