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.

[参考译文] CC3235SF:此任务名为"x"?

Guru**** 2554780 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1029850/cc3235sf-what-is-this-task-named-x

器件型号:CC3235SF

简单的问题... 当我创建sl_Task(),时、我看到它出现在我分配给它的优先级的任务列表中。  但是、我还获得了一项令人兴奋的奖励任务、该任务的名称为"x"、非常有用:

#FE4    10.234 | No Handle   Base Curr HiWByte State     Name
#FE4    10.243 | 17 20037224   20   20     836 Blocked   Tmr Svc
#FE4    10.243 | 03 200203f8   15   15    1120 Blocked   debug_mgr
#FE4    10.244 | 02 2001f568   14   14    1288 Blocked   ioxp_0x21
#FE4    10.245 | 01 2001eb40   14   14    1288 Blocked   ioxp_0x20
#FE4    10.269 | 15 2002ad58   13   13    1320 Blocked   led_main
#FE4    10.269 | 13 20029600   12   12    2376 Blocked   ------------
#FE4    10.270 | 05 20022498   11   11    1216 Suspended ble_tx
#FE4    10.270 | 04 20021de8   10   10    2664 Blocked   ble_rx
#FE4    10.275 | 06 20023700    9    9    3368 Suspended ble_msg
#FE4    10.292 | 18 2002bbc0    8    8    2792 Blocked   sl_task
#FE4    10.293 | 11 20027b30    7    7    1704 Blocked   ------------
#FE4    10.293 | 12 20028940    6    6    2008 Blocked   ------------
#FE4    10.298 | 14 2002a690    5    5    2816 Blocked   ------------
#FE4    10.314 | 10 20026df8    4    4    2296 Blocked   ------------
#FE4    10.315 | 09 20026118    3    3    2416 Blocked   ------------
#FE4    10.315 | 08 20025438    2    2    2440 Running   test
#FE4    10.320 | 07 200243b0    1    1    1936 Blocked   background
#FE4    10.336 | 19 2002c8f8    1    1    1864 Blocked   x
#FE4    10.337 | 16 20037164    0    0     908 Ready     IDLE

(某些任务名称已编辑)

这是怎么回事?  产生的sl_Task()结果是否应导致产生另一项任务?  这是什么?  谢谢。

戴维·R.

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

    尊敬的 David:

    在我的脑海中、我不希望 sl_Task()能够生成另一个名为"x"的任务。

    您使用的是什么 RTOS 以及如何创建此图表?

    谢谢、

    本·M

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

    我正在运行 FreeRTOS、在 CCS 10.4下使用 GCC 进行构建。  我以前 uxTaskGetSystemState()用来检索每个正在运行的任务的状态、然后很好地设置了它们的格式。  根据"否"(数字)字段、您可以看到在"sl_task"(18)之后立即产生了"x"(19)。

    我习惯xTaskCreate()吃虾sl_task()…… 这可能是问题吗?  我是否需要使用中所示的 POSIX APIWifiInit()?  可能相关、sl_Start()我在成功返回时遇到了一些困难。  最初、我获得 了 sl_BAD_interface、直到我意识到SPI_Init()在启动 SimpleLink (用于初始化内部 SPI 驱动程序)之前需要调用。  一旦我这么做,如果我再打电话sl_Start(),它就永远不会返回,尽管它不会使我的系统崩溃(我的 LED 线程继续正常运行)。  我只是生成了一个任务、使用 sl_Task()nullptr作为参数、优先级8的优先级调用一个3000字节的堆栈。

    想法?

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

    尊敬的 David:

    我不希望出现此问题是因为使用本机 FreeRTOS 调用创建任务。 但是、您使用直接 FreeRTOS 调用的具体原因是什么?  

    我们在过去观察到将直接操作系统调用与 POSIX 调用混合时出现的问题。 请参阅此处的示例: https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/721060/cc3220mod-occur-error--2005-at-sl_send-in-case-of-sdk-2-20/2707856#2707856

    请注意、大多数 SDK 资源都构建在 POSIX 层之上、包括器件驱动程序。

    具体而言、对于 sl_Task、主要问题是与系统中的其他任务相比、它似乎具有相对较低的优先级。  它确实需要成为系统中优先级最高的任务之一。 如果在管理主机 MCU 和网络处理器子系统之间的通信的驱动程序中存在超时问题、则可能会出现问题。

    此致、

    本·M

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

    我使用的是直接 FreeRTOS 调用、因为这是我在 CC3220和其他 MCU 架构上的 FreeRTOS 项目中一直使用的内容;我有一个 C++库、完全封装了 FreeRTOS API 的行为。  您是否建议任何人在 CC3235 SimpleLink 项目中的任何位置直接调用 FreeRTOS API 都不安全?  如果不是、具体禁止"混合"本地 FreeRTOS 和 POSIX API 调用的规定是什么?

    我 可以轻松地提高的优先级sl_Task(),这不是问题。  我继续从示例中克隆 POSIX 类型的启动调用、并将其放入我的应用程序中、您知道什么sl_Start()、实际上完成了、这表明它是在 STA 模式下出现的。  我的任务诊断现在显示有两个名为"x"的任务:

    #FE4  1006.337 | No Handle   Base Curr HiWByte State     Name
    #FE4  1006.345 | 17 2003721c   20   20     836 Blocked   Tmr Svc
    #FE4  1006.345 | 19 2002c8e8   15   15    1984 Blocked   x
    #FE4  1006.345 | 03 200203f0   14   14    1120 Blocked   debug_mgr
    #FE4  1006.347 | 02 2001f560   13   13    1288 Blocked   ioxp_0x21
    #FE4  1006.366 | 01 2001eb38   13   13    1288 Blocked   ioxp_0x20
    #FE4  1006.367 | 15 2002ad50   12   12    1320 Blocked   led_main
    #FE4  1006.368 | 13 200295f8   11   11    2376 Blocked   ------------
    #FE4  1006.371 | 05 20022490   10   10    1216 Suspended ble_tx
    #FE4  1006.388 | 04 20021de0    9    9    2664 Blocked   ble_rx
    #FE4  1006.389 | 06 200236f8    8    8    3368 Suspended ble_msg
    #FE4  1006.390 | 11 20027b28    7    7    1704 Blocked   ------------
    #FE4  1006.393 | 12 20028938    6    6    2008 Blocked   ------------
    #FE4  1006.411 | 14 2002a688    5    5    2816 Blocked   ------------
    #FE4  1006.411 | 10 20026df0    4    4    2352 Blocked   ------------
    #FE4  1006.411 | 09 20026110    3    3    2392 Blocked   ------------
    #FE4  1006.416 | 08 20025430    2    2    1872 Running   test
    #FE4  1006.433 | 07 200243a8    1    1    1936 Ready     background
    #FE4  1006.434 | 18 2002bbf0    1    1    1864 Blocked   x
    #FE4  1006.434 | 16 2003715c    0    0     908 Ready     IDLE

    优先级为15的任务是由创建的任务 pthread_create()。  但是、中的某些内容似乎sl_Task()产生 了另一个优先级为1的任务。  这两个项目都被命名为"x"、我想知道为什么... TI 的 pthread 实现无法为任务应用名称或标签、因此它使用默认值"x"。  取自 pthread.c 行56:

    /*  FreeRTOS 10.1.0 requires a valid name (when asserts are enabled).
     *  configMAX_TASK_NAME_LEN may be as small as one character.
     */
    static const char * const tname = "x";

    无论如何,一旦我使用 POSIX API 来进行生成sl_Task(),SL API 调用(包括sl_Start())就会开始工作。

    #ZA4    17.894 | connecting to SSID [The Abyss]
    #ZC4    19.483 | WLAN: STA connected, SSID [The Abyss], BSSID D8:6C:63:F5:44:82
    #ZD4    23.475 | NETAPP: IPv4 acquired, ip 192.168.4.116, gw 192.168.4.1, DNS 192.168.4.1
    #ZA4    23.484 | SSID [The Abyss] connected, IP 192.168.4.116

    因此、如果您能回答优先级1 (低)任务的神秘问题、我会很好奇地知道。  我可以通过在内部拆分pthread_create()并将起始地址与映射文件进行比较来自行解决该问题。

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

    哦、嘿、一个想法... 我看到数字顺序现在已颠倒... 低优先级任务现在是#18、高优先级任务(大概是的肉)sl_Task()是#19。  想知道首次使用的 POSIX 工具是否必须创建一个用于执行某些操作的低优先级任务。

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

    AHA、明白了。  低优先级线程为SlNetConn_processor(),如 ti_net_config.c 中所示:

    static int32_t createSlNetEventThread(void) {
        int32_t             status;
        pthread_t           thread;
        pthread_attr_t      attrs;
        struct sched_param  priParam;
    
        pthread_attr_init(&attrs);
        priParam.sched_priority = 1;
    
        status = pthread_attr_setschedparam(&attrs, &priParam);
        if (status == 0) {
            status = pthread_attr_setstacksize(&attrs, 2048);
        }
    
        if (status == 0) {
            status = pthread_create(&thread, &attrs, SlNetConn_processor, 0);
        }
    
        return (status);
    }

    从而使高优先级任务sl_Task()保持预期状态。  它们都被命名为"x"、因为pthread_create()无法智能地命名线程。  神秘已解决。  感谢您的帮助。

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

    尊敬的 David:

    啊! 很高兴这些更改解决了这个问题、并且您用"x"找出了神秘之处。

    感谢您总结您的调查结果、让他人在将来进行回顾。

    此致、

    本·M