TI/drivers/net/wifi/slnetifwifi.h 文件包括 ti/net/slnetsock.h,该文件又调用我的 RTOS 不提供的 POSIX 信标 API。 移植指南 swru455m 未涵盖此内容。 我应该在这里做什么? 我只想打开 WiFi 并与服务器进行 TCP 连接。 我不需要在 net 目录中使用任何 http、MQTT 和 SNTP 库。 另外,为什么它不使用已经使用信标的 sl_SyncObj*宏?
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.
TI/drivers/net/wifi/slnetifwifi.h 文件包括 ti/net/slnetsock.h,该文件又调用我的 RTOS 不提供的 POSIX 信标 API。 移植指南 swru455m 未涵盖此内容。 我应该在这里做什么? 我只想打开 WiFi 并与服务器进行 TCP 连接。 我不需要在 net 目录中使用任何 http、MQTT 和 SNTP 库。 另外,为什么它不使用已经使用信标的 sl_SyncObj*宏?
您好!
如果您要编写可移植应用、尤其是当您的应用同时具有 Wi-Fi 和以太网时、SlNetIf 和 SlNetSock 库非常有用。 否则、不需要它们。 您可以直接使用主机驱动程序 SL_* API 调用,如 SWRU455所示。 例如、您可以从 network_terminal、配置和 power_measurement 示例中删除这些链接的库、而无需进行其他更改。
sl_SyncObj*宏特定于我们器件的主机驱动程序,但其他库在其他 SimpleLink 器件中是通用的。 所有这些库都使用 POSIX、后者是 IEEE 标准 RTOS API 层、使希望使用这些预构建库的客户能够更轻松地移植 RTOS。 我们的插件为 TI-RTOS 和 FreeRTOS 提供此 API 层、但它可用于任何 RTOS。
此致、
Sarah
我已经开始工作了、但速度不能超过40Kibps。 我怀疑它与我调用 sl_Task 的方式有关。 驱动程序设置为非 RTOS 模式。 我在启动时创建一个新的线程、该线程将继续调用 sl_Task 函数。 在主线程中、我调用其余的 sl_Start -> sl_Connect -> sl_Send 函数。 在我的 PC 上运行 TCP 服务器时、它可以获得的最大速度为40 KIPS。 如果我将其置于 AP 模式并卷曲内置的 HTTP 服务器、我可以得到大约250Kibps。 主机是 STM32 L476 Nucleo 板。 在2.5GHz 接入点上可以期望多高的速度?
您好!
CC3135数据表中列出的最大数据吞吐量 为16Mbps UDP 和13Mbps TCP、但前提是主机驱动程序层也处于最大吞吐量。 根据调用 sl_Task 的频率、这可能是瓶颈所在。
为什么在一个线程中调用 sl_Task 而不是将 RTOS 直接与驱动程序一起使用? 调用 sl_Task 的线程的优先级是多少?
此 E2E 帖子可能有助于解释我们如何在测试 中测量吞吐量:e2e.ti.com/.../733986
此致、
Sarah
这是我使用的代码
#include "mbed.h" #include "ti/drivers/net/wii/device.h" #include "ti/drivers/net/wii/sl_socket.h" #include "ti/net/slnetsock.h" void runSlTask() { sl_Task (nulptr); } int main() { 螺纹螺纹; thread.set_priority(osPriorityHigh); thread.start (callback (runSlTask)); DigitalOut LED (LED1); DigitalOut nReset (PC_8、false); ThisThread:sleep_for (500); nRESET =真; printf ("=================== \r\n"); 自动结果= sl_Start (nulptr、nulptr、nullptr); const auto sockid = sl_Socket (sl_AF_iNet、sl_sock_stream、0); constexpr SlTimever_t timeVal{20、0}; Auto sockOptSetResult = sl_SetSockOpt (sockid、sl_SOL_socket、sl_SO_RCVTIMEO、&timeVal、sizeof (timeVal)); if (sockOptSetResult!= 0){ printf ("ERR\r\n"); NVIC_SystemReset(); } constexpr SlSockNonblocking_t enableOption{1}; sockOptSetResult = sl_SetSockOpt (sockid、sl_SOL_socket、sl_SO_NONBLOCKING、(_u8 *)&enableOption、sizeof (enableOption)); if (sockOptSetResult!= 0){ printf ("ERR\r\n"); NVIC_SystemReset(); } SlSockAddrIn_t addr; Addr.Sin_Family = SL_AF_iNet; Addr.Sin_port = sl_Htons (8888); addr.sin addr.s_addr = sl_Htonl (sl_IPv4_VAL (192、168、42、130)); 结果= SLNETERR_BSD_EALREADY; constexpr auto POLL_interval = 2; constexpr auto MAX_POLL = 20000; constexpr auto MAX_POLL_connect = MAX_POLL; 对于(int i = 0;i < MAX_POLL_CONNECT && RESULT = SLNETERR_BSD_EALREADY;i++){ 结果= sl_Connect (sockid、reinterpret_cast (addr)、sizeof (SlSockAddrIn_t)); thisThread::yield (); 如果(结果< 0){ 该主题::SLEEP_for (POLL_INTERVAL); } } 如果(结果< 0){ printf ("连接%d\n"失败、结果); NVIC_SystemReset(); } constexpr auto buffer_size = 1 * 1024; 静态 char buffer[buffer_size]; std:::transform (std:开始(buffer)、std:结束(buffer)、std:开始(buffer)、 [](char)-> char{return static_cast (标准:rand();}); 对于(int i = 0;i < 1024 * 1024;i++){ 结果= SLNETERR_BSD_EAGAIN; 对于(int k = 0;k < MAX_POLL && RESULT = SLNETERR_BSD_EAGAIN;k++){ { 结果= sl_Send (sockid、buffer、sizeof (buffer)、0); } if (result!= sizeof (buffer)){ 该主题::SLEEP_for (POLL_INTERVAL); } 否则{ LED =!LED; } } thisThread::yield (); 如果(结果< 0){ printf ("发送%d\n"失败、结果); NVIC_SystemReset(); } } sl_close (sockid); sl_Stop (0xFFFF); }