DHCP をオンにして TCP 接続を使用して、lwip ケーブルのオン/オフを防弾にしたいと考えています。どちらのソリューションも問題なく機能しますが、どちらがより賢明で正しいかはわかりません。(間違ったコンテキスト関数呼び出しが怖い)
- 最初の解決策:
電話する:
tcpip_init(network_init, &net);
その後:
xTaskCreate(hc_task, ( signed portCHAR * ) "send hc",1536u, NULL, TCPIP_THREAD_PRIO, NULL);
したがって、メインlwIP
スレッドとスレッドの2つのスレッドがありhc_task
ます。hc_task
は:
static void hc_task(void *parameters)
{
struct hc_message mes;
mes.client_port_number = 4839;
mes.host_addres = "192.168.1.183\0";
mes.host_add[0] = 192;
mes.host_add[1] = 168;
mes.host_add[2] = 1;
mes.host_add[3] = 183;
mes.host_file = "test/data.php\0";
mes.host_port_number = 80;
mes.target = "http://192.168.1.183/test/data.php\0";
transferEnd = 0;
numberOfPacketsProc = 0;
totalRecievedSize = 0;
hc_send(&mes, 0);
vTaskDelete(NULL);
}
hc_send
ページをダウンロードするために TCP 接続を行います。
次に、PHY をチェックしてケーブルの状態を読み取る 2 秒間隔のポーリング タイマーがあります。
if cable is on -> ok
if cable is off -> call netif_set_link_down(pxNetIfInUse);
次にケーブルがオンになったら、次のように呼び出します。
netif_set_link_up(pxNetIfInUse);
これらの関数をタイマー割り込みで呼び出すのは正しいと思います。
- 2番目の解決策:
lwip
2 番目の方法は、タイマー割り込みがメインスレッドにメッセージを送信することです。
Link off -> res = sys_mbox_trypost(toOutput, &msg);
タイマー割り込みは、メイン lwip スレッドに次のいずれかを呼び出すメッセージを送信します。
netif_set_link_up(pxNetIfInUse);
また:
netif_set_link_down(pxNetIfInUse); //(in lwip main thread)
ケーブルの状態 (タイマー割り込みから保存) を格納するためのグローバル変数があり、メインlwip
スレッドでそれをチェックして、適切な関数 (リンク アップまたはダウン) を呼び出します。
だから私はどの解決策がそれを行うためのより良い/正しい方法であるかを尋ねています.
私の構成: マイクロプロセッサ LPC1768 - LAN8720 PHY - FreeRTOS 7.4 - lwip 1.4.1 - DHCP を含む - TCP/IP を含む