This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/LAUNCHCC3220MODASF:WebSocket Server 多任务处理

Guru**** 2595210 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/791441/rtos-launchcc3220modasf-websocket-server-multitasking

器件型号:LAUNCHCC3220MODASF

工具/软件:TI-RTOS

您好!

我想使用 TI-RTOS 通过多个客户端实现 WebSocket Server。 第一步、我在 mainTask 中使用一个客户端尝试它、工作正常。 现在我想在 成功的 sl_Accept()之后调用一个自己的任务来进行通信。

维护任务

.

Task_Structtask0;
Task_Params taskParams;

.

Task_Params_init (&taskParams);
taskParams.STACKSIZE = 8192;
taskParams.priority = 2;

…………

i32_nonblocking = true;
i32_RetVal = sl_SetSockOpt (i32_Sock、sl_SOL_Socket、sl_SO_NONBLOCKING、&i32_NONBLOCKING、sizeof (i32_NONBLOCKING));

.

i32_TempSock = sl_accept (i32_Sock、pst_SockAddr_CSA、(SlSocklen_t*)&i32_AddrSize);

taskParams.arg0 =(int32_t) i32_TempSock;

Task_construct(&task0、WebsocketServerComTask、&taskParams、NULL);

.

WebsocketServerComTask

int32_t i32_TempSock =(int32_t) arg0;

.

i32_RetVal = sl_SetSockOpt (i32_TempSock、sl_SOL_Socket、sl_SO_NONBLOCKING、&i32_NONBLOCKING、sizeof (i32_NONBLOCKING));

.

i32_RetVal = sl_Recv (i32_TempSock、&au8_RecvBuffer、WebSocket MAX_BUF_SIZE、0);

.

调用 sl_Recv 后、电路板进入 Ideltask。 mainTask 以 优先级=1运行。 我出了什么问题?

非常感谢。

此致。

托比亚斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Tobias、

    很难说出您可能会出什么问题。 但是对于非阻塞任务,您需要正确处理 sl_error_bsd_EAGAAIN 返回代码,该代码来自 sl_accept ()和其他非阻塞套接字 API。

    我个人在应用处理器上使用自己的 http 服务器来为多个客户端套接字提供服务。 我有一个服务器任务和多个客户端任务。 我从头开始创建此任务。 只有服务器任务正在运行并接受传入连接。 在新连接取消阻止客户端任务后、套接字句柄将从服务器传输到客户端任务、并为客户端提供服务。 这种方法的优势是、在连接客户端的情况下、资源消耗更低。 但是、您的方法很好、它也应该起作用。 我对服务器和客户端任务使用相同的优先级。 但是在 sl_ERROR_BSD_EAGAIN 的等待循环中,我调用 SLEEP ()以将上下文切换到其他任务。

    我有以下任务:

    11:57:29.395>> 0x20015f70:{empty-instance-name}0 READY 168 512 (32%)
    11:57:29.395>> 0x200004b0:系统任务 6 blocked 1688 3096 (54%)
    11:57:29.395>> 0x200011b0:cmdSerialTask 5正在运行976 2048 (47%)
    11:57:29.395>> 0x20001a78:displayTask 6阻塞960 2048 (46%)
    11:57:29.395>> 0x20002340:alarmsTask 6 blocked 816 2048 (39%)
    11:57:29.395>> 0x20002c08:cmdTcpServerTask 5 blocked 1224 2048 (59%)
    11:57:29.395>> 0x200034d0:findDeviceTask 5就绪 680 2048 (33%)
    11:57:29.395>> 0x20003d98:httpClientTask 5 blocked 2856 5120 (55%)
    11:57:29.395>> 0x20005280:httpClientTask 5 blocked 2856 5120 (55%)
    11:57:29.395>> 0x20006768:httpClientTask 5 blocked 2856 5120 (55%)
    11:57:29.395>> 0x20007c50:httpServerTask 5 blocked 564 1024 (55%)
    11:57:29.395>> 0x20008118:modbusClientTask 5 blocked 1328 2048 (64%)
    11:57:29.395>> 0x20008a00:modbusClientTask 5 blocked 1328 2048 (64%)
    11:57:29.395>> 0x200092e8:modbusServerTask 5阻塞560 1024 (54%)
    11:57:29.395>> 0x200097d0:slTask 5阻塞920 2048 (44%)
    11:57:29.395>> 0x2000a098:wlanTask 5阻塞984 2048 (48%) 

    1月