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.

[参考译文] CCS/CC3220SF-LAUNCHXL:如何从系统获取已完成的线程?

Guru**** 2595805 points
Other Parts Discussed in Thread: CC3220SF, CC3200

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/831233/ccs-cc3220sf-launchxl-how-do-i-get-finished-threads-from-the-system

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件:CC3220SFCC3200

工具/软件:Code Composer Studio

大家好、

客户有以下问题:

"我在调试器中的变体 TI 工具链+ TI-RTOS 中运行了来自 TI 的示例 TCP-Echo。
在此示例中、为每个已接受的客户端请求启动新线程、然后在该线程中与相应的客户端进行通信。
根据程序代码、如果 recv 返回错误或0、则线程终止。
在我的测试中、我启动了一个客户端、使用 CTRL-C 中止了它、重新启动了它、等等。 一次只有一个客户端处于活动状态。

客户程序:
- TI PythonScript
-呼叫:
Python tcpSendReceive.py 192.168.178.30 1000测试-s1000 -n10
-终止 CTRL-C

第三次连接尝试已在此处失败。 该模块随后不再处于网络中(路由器会列出 WiFi 用户)。

运行时对象查看器还显示实际完成的线程。 它们具有优先级3、现在为-1、并且仍然占用内存/堆栈。 这不可避免地意味着随着客户端和/或登录数量的增加、系统内存不足。

如果创建了更多的线程、则它们的堆栈指针始终高于之前已经完成的进程。
是否可以再次释放这个"死区"RAM 区域? 或者、已完成线程的堆栈内存是否为系统"空闲"、是否按需提供?

因此、我的问题是:如何从系统中获取已完成的线程?
tcpWorker 线程末尾的 pthread_exit 不起作用。"

谢谢、

Franz

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

    弗朗茨

    软件运行不正常。 tcpWorker 任务应终止、然后由空闲任务删除。 我看到已过期的任务处于非活动状态;这可能解释了空闲任务不删除它们的原因。

    我必须设置一个测试台并进行研究。 您使用的是哪个 SDK 版本?

    SimpleLink CC32xx SDK 3.20.0.06是最新版本。

    一个建议是修改示例、使 tcpWorker 任务在其到期之前将其放在删除列表中。 然后、编写您自己的空闲函数以删除删除列表上的所有任务。

    ~Ramsey

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

    弗朗茨

    第一个数据点。 我测试了 SimpleLink MSP432E4 SDK 3.20.00.10、其行为正确。 NDK 和 Wi-Fi 堆栈之间必须存在差异。 我将继续调查。

    ~Ramsey

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

    大家好、

    我叫 Roman、我是客户。

    首先、感谢您的帮助。

    我使用了 SDK simplelink_cc32xx_sdk_3_20_00_06中未经修改的 tcpEcho 示例。 该样片也与此 SDK 版本链接在一起。

    对于第二次运行、我在 release.cfg 中设置"Task.deleteTerminatedTasks = true"、但结果相同。

    如需更多信息、请参阅:我还刷写了 SDK 随附的服务包。 但我认为这不是问题。

    祝你一切顺利、
    罗马

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

    您好、Roman、

    我使用选项 Task.deleteTerminatedTasks = true;在基于最新 CC32XX SDK 的代码中、它可以正常工作。

    我将多客户端 TCP 服务器与客户端套接字的单独任务一起使用。 我没有反复地创造新的任务,因为它浪费了资源。 当客户端连接关闭时、我将暂停任务、并在需要新客户端时恢复。

    1月

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

    您好、Jan、

    非常感谢您的回答。

    我已经在 tirtos 项目的文件 release.cfg 中设置了选项 Task.deleteTerminatedTasks = true。

    是的、您始终正确创建新任务需要大量资源。 当然、您的方式更好。 我想我也会用这种方法。 稍后;)

    但我描述的行为 (任务已终止、但仍使用资源)不正确。

    我也有很多关于 tcpEcho 的问题。 几分钟后、基于 python 的回波测试停止、模块向我的网络显示 goodby。 没有任何意见。 我在 ERROR/状态回调 函数中插入了一些 DebugOutputs、但看不到任何输出。

    您是否遇到 WiFi 问题、例如断开连接?

    我注意到不同地点的不同 WiFi 网络、以及不同的 TI 评估板。

    非常感谢、
    罗马

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

    您好、Roman、

    我将 CC3220SF 与真正的大型项目(许多功能、我的代码行超过30万行)搭配使用。 我没有任何无法解决的重大问题。 从我的角度来看、CC3220是一个非常稳定的平台。 比旧版 CC3200要好得多。 可能有几件事需要改进、少数事情应该用不同的方式来做、但没有什么是完美的。 我多年前就开始使用 CC32xx 器件。 实际上、我使用 CC32XX 的时间比 TI SimpleLink Wifi 应用团队的许多成员长。

    我认为 SDK 示例存在一个问题。 SDK 示例不像应有的那样具有项目符号。 许多事情都应以不同的方式在示例中处理。 这些示例背后的理念是尽可能简化代码。 但我认为这种做法可能会适得其反。 但这只是我的看法。

    这种行为可能有许多原因。 第一步、您应确保不卡在硬故障处理程序上。 如果您确定主机代码仍在运行、则可以捕获 NWP 日志。 您可以将此日志上传到 WiFi 论坛。 来自 TI 应用团队的人员能够对该日志进行解码、并能够说出所关注的内容。 我在 CC3220方面的经验是、我自己造成的问题超过99%。 CC2XX 平台本身只会导致少量问题。

    1月

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

    Franz、Roman、

    我发现了问题;它是 tcpEcho 示例中的错误、而不是 Wi-Fi 堆栈中的错误。 这意味着您可以轻松解决它。

    问题是 tcpEcho 示例创建了处于"已连接"状态的每个 tcpWorker 线程。 这意味着、当 tcpWorker 线程准备好终止时、它将等待与父线程连接。 但是、父线程永远不会与 tcpWorker 线程连接、因此它会永远等待。

    修复方法是在"已缓存"状态下创建 tcpWorker 线程。 这意味着它将在不等待与父级联接的情况下终止。

    编辑文件 platform.c (在 tcpEcho 示例中)。 查找函数 TaskCreate()。 插入以下行:

    int detachState;

    detachState = pthread_create_detached;
    pthread_attr_setdetachstate (&pAttrs_TCP、detachState);

    在调用 pthread_attr_init()之后以及调用 pthread_create()之前执行此操作。

    我将在此基础上归档一个错误、以便在即将发布的 SDK 版本中修复。

    ~Ramsey

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

    您好、Jan、

    非常感谢您提供的信息。 这给了我一种良好的感觉。

    我不知道在大多数情况下,问题是放在计算机前面,而不是计算机内部。
    这就是人生。

    祝你一切顺利、
    罗马

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

    您好、Ramsey、

    我无法说出为什么我在示例代码中看不到它。

    我的计划我将任务创建为可分离式、对此没有任何问题。 因为我的程序有一些问题、所以我切换回了示例代码。 ;)

    至少我能够在 ROV 方面取得初步经验。

    非常感谢大家、
    罗马