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.

[参考译文] SimpleLink 驱动程序从2.10更新到2.20在 sl_Start 上挂起

Guru**** 2558250 points
Other Parts Discussed in Thread: SYSBIOS, CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/707537/simplelink-driver-update-from-2-10-to-2-20-hangs-on-sl_start

器件型号:CC3220

大家好、

我最终决定将我的项目从之前的版本2.10.00.04迁移到最新的 SDK 和驱动程序(2.20.00.10)。 不幸的是、我有一个问题、我需要您的帮助。

我的代码在以前的驱动程序版本中可以正常工作。 但是在更新到最新版本的驱动程序后,它会在第一次调用 sl_Start() API 时挂起。 它位于文件 device.c 中的第185行、并等待异步。 永久事件:

verify_RET_OK (_SlDrvWaitForInternalAppointointoumenEvent (ObjIdx、init_complete_timeout、sl_opcode_device_INITCOMPLETE)); 

我的 sl_Task 在 spwan.c 中的107行循环时生成、任务"正在运行"

//此处我们已准备好执行条目*/
while (true)
{//
等待事件*/
_SlInternalSpawnWaitForEvent();
} 

观察结果/要点很少:

  • 问题与 ServicePack 版本无关(我使用3.7.0.1和3.8.0.3测试了代码、结果相同;使用相同的 SP 版本、2.20版的 network_terminal 演示工作正常)
  • 如果在调用调度程序之前从 main 调用 sl_Start(),则会执行 sl_Start()并正确返回。 此时仅初始化硬件。 不会产生 SimpleLink 和其他任务。
  • 我使用 TI-RTOS 和 CCS 7.4 (我预计 CCS 版本不会出现问题)
  • 问题与宏 sl_platform_multi_threaded 无关

Update1:好的,现在我了解了为什么 sl_Start()在没有 sl_Task 的情况下工作,但仍然不了解任务运行时的情况

Update2:似乎已触发中断、_SlInternalSpawn 从处理程序调用、并由 sl_DRV_SYNC_OBJ_SIGNAL (&G)进行签名;但它仍然不起作用。  如何工作新的 spawn.c 对我来说真的很神秘。

我仍然不熟悉最新驱动程序中的更改、这些更改非常复杂、我不确定为什么在提供异步功能时遇到问题。 事件。 我很乐意提供任何提示或建议。

谢谢

1月

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

    您好!

    问题已解决。 需要利用大量的电铲、深入了解 SimpleLink 驱动程序和 SYSBIOS 内核。 问题出在任务创建的 OSI 层实施中。  在研究新的 SimpleLink 驱动器时、我发现在实现同步方面没有什么可疑之处、我稍后将对此进行研究。 如果发现任何问题、我将报告。

    问题的解决非常简单。 必须将 OSI_TaskCreate()的实现从旧代码(从 CC3200 SDK 到 POSIX)更改为实际代码。

    osiReturnVal_e OSI_TaskCreate (P_OSI_Task_Entry pentrry、const signed char * const pcName、unsigned short usStackDepth、
    void *pvParameters、unsigned long uxPriority、OsiTaskHandle *pTaskHandle)
    {
    int32_t RetVal;
    pthread_attr_t pAttrs_spawn;
    struct sched_param primParam;
    pthread_t favenThread;
    
    pthread_attr_init (&pAttrs_spawn);
    priParam.sched_priority = uxPriority;
    RetVal = pthread_attr_setschedparam (&pAttrs_spawn、&priParam);
    RetVal |= pthread_attr_setstacksize (&pAttrs_spawn、usStackDepth);
    
    RetVal = pthread_create (&fromThread、&pAttrs_spawn、(void *(*)(void *)) pentry、NULL);
    if (RetVal < 0)
    {
    返回 OSI_FAILURE
    ;}
    
    返回 OSI_OK_P;
    } 

    1月

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

    非常感谢大家分享这一信息。

    BR、