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.

[参考译文] CC3220S-LAUNCHXL:无法在 SimpleLink CC32XX SDK AWS IoT 插件中运行'subscribe_publish_sample&#39。

Guru**** 2558250 points
Other Parts Discussed in Thread: CC3220S

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/605322/cc3220s-launchxl-unable-to-run-the-subscribe_publish_sample-in-the-simplelink-cc32xx-sdk-aws-iot-plugin

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

您好!

我‘s在 CC3220S LaunchPad 板上启动并运行适用于 Amazon Web Services (WS)IoT 的“subscr_publish_sample”示例项目,但尚未成功。 在对代码和工程进行一些更正后、我最终能够生成示例。 但是,程序在运行时会在模块 netwifi.c 的 setStationMode()内调用 sl_Start()的某个位置失败  对  sl_Start()的调用永不返回。

具体而言、我将使用 CCS v7作为 IDE 构建 FreeRTOS、该示例的 GCC 变体。

示例项目从 SimpleLink CC32XX SDK AWS IoT 插件(aws_cc3220_1_00_00_12)导入。 我使用的是 SimpleLink SDK (simplelink_cc32xx_sdk_1_40_00_03)和 FreeRTOSv9.0.0。

 

为了使工程能够编译、我需要对工程和文件进行以下更正。

文件中

${com_TI_aws_CC32XX_INSTALL_DIR}\SOURCE \ti\net\socket.h

修复了三个头文件的路径、并包含两个缺失的头文件。

#Elif Defined (NET_SL)

#include 

#include /* SML -固定路径*//#include


#include /* SML -固定路径*//#include


#include /* SML -固定路径*//#include


#include /* SML -包含的头文件*/
#include /* SML -包含的头文件*/


#Elif Defined (NET_NDK)

 在项目链接器文件 CC3220S_LAUNCHXL_FreeRTOS.lds 中

添加了符号_stack_end

.stack (NoLoad):align (0x8){
_stack =.;
_stack =.;
_stack_end =__stack;/* FreeRTOS 所需的符号*/
Keep (*(.stack)
)}> region_stack at > region_stack

 

最后、在链接器的项目设置(属性)(build->GNU 连接器)中、有必要从各个库选项中删除路径、并将这些路径添加到库搜索路径中。

 例如、

":${com_TI_SIMPLELINK_CC32XX_SDK_INSTALL_DIR}\SOURCE \ti\DRIVERS\NET\WIFI\gcc\rtos\simplelink.a"

 更改为:

”:simplelink.a"

 然后将以下库搜索路径添加到链接器选项中:

"${COM_TI_SIMPLELINK_CC32XX_SDK_INSTALL_DIR}\SOURCE \ti\DRIVERS\NET\WIFI\gcc\RTOS "

 

是否有人能够成功运行此 AWS 示例项目。  是否有人可以建议为什么此示例不运行?

谢谢、

Steve

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

    您好、Steve、

    AWS 插件(aws_cc3220_1_00_00_12)是为 simplelink_cc32xx_sdk_1_30_01_03构建的、尚未赶上刚刚发布的新 SDK 1.40更新、这就是为什么这些示例没有直接为您构建的原因。

    我认为您已经进行了所有必要的更改、但我认为您需要在链接器命令文件中进行一次修改。

    .stack (NoLoad):align (0x8){
    _stack =.;
    _stack =.;
    Keep (*(.stack))
    。 += 0x800;
    _stack_end =.;
    __STACK_END =.;
    } > region_stack at>region_stack
    

    可以试试吗?

    ~Roger

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

    我可能应该注意到、当我添加符号__STACK_END 时,实际上存在一个零长度的栈。 单步执行代码、我看到我看起来是损坏的 OS 列表对象、这是有道理的、因为堆栈会通过堆不断增长。 在任何情况下、我似乎再次启动并运行。

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

    嗯、似乎我还没有走出树林。 当我运行示例时、我发现我无法连接到 AWS 端点、我意识到本地时间设置错误。 这些问题与 C 时间库的使用有关 ,特别是函数 time() localtime()的使用

    我将此问题跟踪到在 startntp()内对 SNTP getTime()进行的调用。 特别是回调函数 setTime(),它传递到 SNTP_getTime()并最终从该函数调用

    setTime()中有一些问题,但我验证了传递给它的参数是否正确地表示 epoch 时间,因此从 NTP 服务器获取时间值的代码工作正常。

    setTime()中的第一个问题是它调用了系统 time()函数,该函数似乎不会实现,因为调用 time()时输出的值始终为-1。 调用堆栈显示以下内容:

    时间()

      gettimeofday r ()

         gettimeofday ()

    从.map 文件中,我看到函数_gettimeofday ()是从 libnosy.a 中的 gettod.o 获取的

    我修改了 setTime()函数,将 ts 值设置为通过参数 t 传入的 epoch 时间。这至少为我提供了有效的 GMT 时间。

    /*
    === settime ======
    //
    void setTime (uint32_t t)
    {
    slDateTime_t dt;
    struct tm;
    struct timespec TSPEC;
    time_t ts;
    
    TSPEC.tv_sec = t;
    Clock_settime (clock_realtime、&TSPEC);
    
    时间(&T);/*这始终返回-1 */
    
    TS =(time_t) t;/*已添加-使用传递给 setTime()的(正确) epoch 时间*/
    
    TM =*本地时间(&ts);/*生成的 TM 结构有效、但为 UTC 时间值*/
    
    /*在网络处理器上设置系统时钟以验证证书*/
    dt.tm_day = tm.tm_mday;
    /* TM.TM_mon 是自1月起的月份、因此添加1以获得实际月份*/
    DT.TM_mon = TM.TM_mon + 1;
    /* TM.TM_year 是1900年以来的一年、因此添加1900即可获得实际年份*
    DT.TM_year = TM.TM_year + 1900;
    DT.TM_Hour = TM.TM_Hour;
    DT.TM_MIN = TM.TM_MIN;
    DT.TM_sec = TM.TM_sec;
    SL_DeviceSet (SL_DEVICE_General、SL_DEVICE_General_DATE_TIME、
    sizeof (slDateTim_t)、(unsigned char *)(&dt));
    }
    

    然后调用函数 localtime(),该函数会转换 epoch 时间并返回指向有效 TM 结构的指针。 但是、该结构中的时间始终表示为 UTC 时间。

    将网络处理器上的系统时钟设置为 UTC 时间值可让我至少连接到 AWS 端点、但我确实需要能够获取本地时间。   此外,即使我对控制台进行了修改,仍会报告错误的时间,因为它依赖于对 time()函数的另一个调用,该函数始终返回-1。

    是否有办法修复此示例以便 C 时间库正常工作? SimpleLink CC32XX SDK AWS IoT 插件中的其他两个示例(shadow_sample shadow_sample_console_echo)也依赖于 C 时间库。

    谢谢、

    Steve