How to stop RTCS_ping() while awaiting ICMP echo reply before the TIMEOUT expires

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

How to stop RTCS_ping() while awaiting ICMP echo reply before the TIMEOUT expires

ソリューションへジャンプ
1,624件の閲覧回数
icelee
Contributor III


hello


I'm using MQX 4.2.0.2 RTCS_ping() on FRDM-K64F.

I created a PING task using RTCS_ping() to regularly check the network.
And I know it will block the PING task while await ICMP echo reply.


Now the situation is,
After RTCS_ping() be executed, while awaiting ICMP echo reply before the TIMEOUT expires,
in some cases, PING task needs to be restart using _task_restart() by the MAIN task.
Although the return value of _task_restart() is MQX_OK,
in fact, PING task doesn't work after 'restart'.


Does anyone know how to stop the wait of ICMP echo reply before the TIMEOUT expires?

Thanks.

タグ(1)
0 件の賞賛
返信
1 解決策
1,433件の閲覧回数
icelee
Contributor III

I found the way to stop RTCS_ping() while awaiting ICMP echo reply before the TIMEOUT expires.


[Solution]

point is
・Remove the ICMP echo send info in ICMP config chain (Can get by RTCS_getcfg(ICMP))
・Cancel the TCPIP timer event used for PING expire (TCPIP_Event_cancel())


Refer to the ICMP echo reply code can be achieved.

---------------------------------------------------------
Freescale_MQX_4_2\rtcs\source\tcpip\icmp.c

void ICMP_service(){
...
   case ICMPTYPE_ECHO_REPLY:

}
---------------------------------------------------------


Now PING task runs well after _task_restart().

元の投稿で解決策を見る

0 件の賞賛
返信
3 返答(返信)
1,434件の閲覧回数
icelee
Contributor III

I found the way to stop RTCS_ping() while awaiting ICMP echo reply before the TIMEOUT expires.


[Solution]

point is
・Remove the ICMP echo send info in ICMP config chain (Can get by RTCS_getcfg(ICMP))
・Cancel the TCPIP timer event used for PING expire (TCPIP_Event_cancel())


Refer to the ICMP echo reply code can be achieved.

---------------------------------------------------------
Freescale_MQX_4_2\rtcs\source\tcpip\icmp.c

void ICMP_service(){
...
   case ICMPTYPE_ECHO_REPLY:

}
---------------------------------------------------------


Now PING task runs well after _task_restart().

0 件の賞賛
返信
1,433件の閲覧回数
danielchen
NXP TechSupport
NXP TechSupport

HI Bing:

I suggest you check the state and priority of ping_task after restart.

In MQX, Task can create, destroy , block, set ready and restart.

_task_create() _task_destroy() _task_block() _task_ready() _task_restart()

Regards

Daniel

0 件の賞賛
返信
1,433件の閲覧回数
icelee
Contributor III

HI Daniel:


Thank you for the reply.

As your suggest,
I added "STATE of TD_STRUCT_PTR" and "_task_get_priority" to get the state and priority of PING task
before restart and after restart.


[result is below]

-----------------------------------------------------------------------------------------------
before restart --- Ping task priority: 10.    <-- priority is 10
before restart --- Ping task state: 13.       <-- state is SEND_BLOCKED

..._task_restart() Ping_task OK.

after restart --- Ping task priority: 10.     <-- priority is 10
after restart --- Ping task state: 2.         <-- state is SEND_BLOCKED

... after 1 sec get again

after restart --- Ping task priority: 10.     <-- priority is 10
after restart --- Ping task state: 11.        <-- state is UNHANDLED_INT_BLOCKED

... and then always get the same results

after restart --- Ping task priority: 10.
after restart --- Ping task state: 11.
-----------------------------------------------------------------------------------------------


After _task_restart(), the state of PING task was from READY turn to UNHANDLED_INT_BLOCKED.

It seems that unhandled interrupt or exception occurs happened ?


Regards

Bing

0 件の賞賛
返信