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.

[参考译文] LPSTK-CC1352R:调试器存在奇怪的问题

Guru**** 633805 points
Other Parts Discussed in Thread: LPSTK-CC1352R, SEGGER, SYSCONFIG, LAUNCHXL-CC1352R1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1182727/lpstk-cc1352r-strange-problems-with-debugger

器件型号:LPSTK-CC1352R
主题中讨论的其他器件: SEGGERSysConfigLAUNCHXL-CC1352R1

大家下午好、 我在 LPSTK-CC1352R 板上遇到了一些奇怪的新问题。
直到昨天、它工作正常、但后来、它开始出现了一些有关计时器和 uart2的问题。

实际上很难描述、但看起来调试复位和关断不再正常工作。 我的意思是、它们确实会复位和关闭调试器、但代码将不再正常工作、并且会出现一些无法预测的行为、包括卡在函数"Hwip_distation"中或不再调用中断。 甚至比这更陌生、有时它会按预期工作、有时它会按预期工作。 我还注意到、在大多数情况下关闭电路板会有所帮助、如果在定时器或 uart2仍在运行(未停止)时重置调试器关断、肯定会出现问题。

我测试这些问题的代码已经过测试、运行正常。 即使使用 TI 自己的示例、也会出现这些问题。
例如、让我们以时间中断为无 RTOS 示例、让其每秒闪烁一次 LED。 这是一个标准的 TI 示例、它以前没有问题、但现在大多数情况下、这些问题都会弹出。

我对电池的使用感到很不爽、但是、即使用新电池更换电池、问题也不会消失。
以前是否有人有过类似的经历? 它让我疯了。

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

    您好、Matteo、

    我以前没有听说过这种行为。

    您能否提供更多详细信息、最好是重现问题的步骤?

    -您能否显示调试器设置

    "调试复位和关断"是什么意思?

    谢谢、

    玛丽·H

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

    感谢您的回答。

    要回答您的问题、这里有一种简单的方法、让我有了这种奇怪的行为。
    采用 TI 自己的 SimpleLink CC13xx CC26xx SDK 中名为"timerled"的示例。 我对它所做的唯一修改是在非 RTOS 环境中复制 timerled.c 代码(如"gpiointerrupt"示例中的代码)。
    在我遇到这些问题之前、它工作正常。 示例很简单、它基本上会启动计时器、让 LED 每1秒闪烁一次。 在这些问题开始出现后、这个简单的示例也开始执行奇怪的操作。

    我的调试器设置与默认设置相同(我使用的是 CCS 版本12.1.0.00007)、但以下情况除外:
    -选中"Halt the target before any bebugger access (will impact access of interrupts)"复选框。
    优化级别为-O0。
    -向编译器标志添加了"-ffunion-sections -Fdata-sections "(如果缺失)。
    -向链接器标志添加了"-WL、--gC-sections "(如果缺失)。

    应该注意的是、我使用 的是 Segger J-Link、编译器版本是 GNU v9.2.1 (Linaro)。

    最后、通过"调试复位和关断"、我分别指 的是调试 视图顶部栏中的"Restart"(黄色半圆形箭头、顶部为绿色播放图标/三角形)和"Terminate"(红色方形)按钮。

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

    您好、Matteo、

    感谢您的详细描述。

    要在调试会话中重新启动程序、请使用电路板复位按钮:

    2. 您使用的是哪个版本的 SimpleLink CC13xx/CC26xx SDK?

    我想知道这是否与 TI RTOS 定时器和非符号之间的切换有关。 但是、如果您使用的是较新的 SDK 之一、DPL (驱动程序移植层)应处理此问题。 您最终是否打算使用 TI RTOS?

    谢谢、

    玛丽·H

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

    你好、Maria。

    现在、我将尝试使用"Board Reset"按钮。 稍后我将对其进行一些测试、看看它是否有用、然后我将告诉您结果。
    编辑:我实际上没有这些选项。 该按钮仅为我提供"CPU Reset"和"Core Reset"选项。

    至于 我正在使用的 SimpleLink CC13xx/CC26xx SDK 版本、我测试过它的版本是6.30.00.84版本。

    最后、我实际上计划保留在北区、因此我尝试避免使用 TI RTOS。

    但是、请记住、在遇到这些奇怪的问题之前、我已经在这个电路板上工作了几个月、这意味着所有这些事情(如何在调试会话中重新启动程序、SDK 版本和 nortos)过去不会影响我。

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

    您好、Matteo、

    复位选项可以由 Segger 调试器设置、您是否与 Segger 团队联系过此问题?

    如果您发布代码、我可以在 LaunchPad 上运行代码、看看我是否可以重现问题。 我不确定我还能做些什么来帮助你向前迈进。

    谢谢、

    玛丽·H

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

    您好、Marie、

    好的、我现在将发布 我之前讨论过的时间错误的 No-RTOS 示例的代码。
    其他所有内容都与我目前所描述的一样(版本、调试器设置等)。

    main_nortos.c 文件

    /*
     * Copyright (c) 2017-2020, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    /*
     *  ======== main_nortos.c ========
     */
    #include <stdint.h>
    #include <stddef.h>
    
    #include <NoRTOS.h>
    
    #include <ti/drivers/Board.h>
    
    extern void *mainThread(void *arg0);
    
    /*
     *  ======== main ========
     */
    int main(void)
    {
        Board_init();
    
        /* Start NoRTOS */
        NoRTOS_start();
    
        /* Call mainThread function */
        mainThread(NULL);
    
        while (1) {}
    }
    


    timerled.c 文件
    /*
     * Copyright (c) 2016-2020, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    /*
     *  ======== timerled.c ========
     */
    
    #include <stddef.h>
    
    /* Driver Header files */
    #include <ti/drivers/GPIO.h>
    #include <ti/drivers/Timer.h>
    
    /* Board Header file */
    #include "ti_drivers_config.h"
    
    /* Callback used for toggling the LED. */
    void timerCallback(Timer_Handle myHandle, int_fast16_t status);
    
    /*
     *  ======== mainThread ========
     */
    void *mainThread(void *arg0)
    {
        Timer_Handle timer0;
        Timer_Params params;
    
        /* Call driver init functions */
        GPIO_init();
        Timer_init();
    
        /* Configure the LED pin */
        GPIO_setConfig(LED1, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    
        /* Turn off user LED */
        GPIO_write(LED1, CONFIG_GPIO_LED_OFF);
    
        /*
         * Setting up the timer in continuous callback mode that calls the callback
         * function every 1,000,000 microseconds, or 1 second.
         */
        Timer_Params_init(&params);
        params.period        = 1000000;
        params.periodUnits   = Timer_PERIOD_US;
        params.timerMode     = Timer_CONTINUOUS_CALLBACK;
        params.timerCallback = timerCallback;
    
        timer0 = Timer_open(TIMER, &params);
    
        if (timer0 == NULL)
        {
            /* Failed to initialized timer */
            while (1) {}
        }
    
        if (Timer_start(timer0) == Timer_STATUS_ERROR)
        {
            /* Failed to start timer */
            while (1) {}
        }
    
        return (NULL);
    }
    
    /*
     * This callback is called every 1,000,000 microseconds, or 1 second. Because
     * the LED is toggled each time this function is called, the LED will blink at
     * a rate of once every 2 seconds.
     */
    void timerCallback(Timer_Handle myHandle, int_fast16_t status)
    {
        GPIO_toggle(LED1);
    }
    


    此外、在我的 SysConfig 文件中、我配置了 launchpad 红色 LED (称为 LED1)和32位计时器(称为计时器)。

    与往常一样、请记住、这个具有精确设置的简单示例在上个月开始出现这些奇怪问题之前工作正常。

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

    只是想让您知道、我们已经重现了该问题、并且正在对此进行处理。

    BR

    Siri

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

    谢谢。 我期待进一步了解您未来对此的调查结果。

    说到这一点、我最近还在 LAUNCHXL-CC1352R1板上遇到了类似的问题(这次在没有 SEGGER J-Link 的情况下使用)、使用调试窗口中的重新启动按钮。 然而、在后一个电路板上、调试窗口设法向我显示"电路板复位"选项(当我调试 LPSTK-CC1352R 时不存在该选项)、它的工作方式与 Marie 预期的一样、但从长远来看、它无法解决问题、仅在当前问题中。

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

    Siri、Matteo、  

    只需确认-使用  CCS 12.1.0使用 LAUNCHXL-CC1352R1板的板载 XDS110也会重现此问题?

    谢谢

    Ki

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

    完全正确。

    编辑:今天、我开始使用 LP-CC1312-R7电路板、并实际测试了它在这个问题上是否表现得相同。 经过一些测试、我可以确认  LP-CC1312-R7的运行方式与 LAUNCHXL-CC1352R1的运行方式相同(使用 XDS110和 CCS 12.1.0)。

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

    当我重新启动时、我可以在自定义(非基于 RTOS)计时器 LED 示例上重现此问题。 该示例似乎只会发生这种情况。 所有其他示例都不会出现此问题。

    有关"重新启动"的注释。 调试器只需将程序计数器设置为已加载应用程序的入口点。 没有其他事情发生。 如果之后程序无法正常运行、我没有解释原因。  通常、器件会进入不良状态、系统/板复位会解决该问题(这也适用于我)。 它为什么会进入不良状态是未知的。 但这通常是应用本身的问题。 鉴于只有这个自定义/修改的示例存在问题、我怀疑根本原因来自此。 我没有器件知识来提供更多的见解。

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

    Siri -您是否也可以在标准(未修改) SDK 示例上重现此问题?

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

    值得注意的一点是,12月22日之前,我觉得这件事还不错;不管出于什么原因,这些问题都是在12月22日之后开始出现的。
    此外、修改后的时间引导示例只是我所遇到问题的一个实例(最简单的实例)、我的其他非 RTOS 程序(在 12月22日之前仍然正常工作)开始同时出现相同的问题、而不仅仅是计时器外设、 但是对于 uart2、正如我在这个线程中进一步解释的那样。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="548016" URL"~/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1182727/lpstk-cc1352r-strange-problems-with-debugger/4493533 #4493533"]我的其他非 RTOS 程序(在 12月22日之前再次正常运行)同时开始出现相同的问题,不仅是计时器外设问题,而且还包括 uart2程序问题,正如我在本主题中进一步解释的那样。

    其他未修改的 RTOS 程序是否为原始 SDK 示例? 您能否通过标准 SDK 示例重现此问题?

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

    我所说的是我从示例开始修改的 NO-RTOS 程序。 我还没有尝试过其他标准 SDK 示例。

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

    我使用 pwmled2示例进行了测试、但未遇到问题。

     由于"Restart"按钮将程序计数器设置为已加载应用程序的入口点而不进行器件复位、因此出现问题。 由于只有程序计数器发生更改并且器件未复位、因此计时器中断仍然启用、并且在执行重新启动时计时器仍在运行。

     当按下 RESUME 按钮并发生计时器中断时,  在 Hwip_disped()函数中,obj 指针设置为空值,因为 在 Hwip_dispchTable 数组中,计时器中断的指针未设置。

    为避免此问题、 应使用 CPU RESET 按钮重新启动器件。

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

    好的、这在某种程度上是合理的、在 LP-CC1312-R7 和 LAUNCHXL-CC1352R1板上、实际上有一个"板复位"选项可以"解决"问题。
    但是 、LPSTK-CC1352R 板没有该选项(或者、至少我没有得到它、我不知道它是否源于我使用 SEGGER J-link) 它还显示了"终止"选项和关闭电路板的问题并不总是有帮助。 更不用说、12月22日之前、一切正常、包括"Restart"选项。 此外、在 这个问题期间、该程序并不总是停留在 Hwip_distpatch 上、有时它似乎也按预期工作、但完全不触发中断除外。
    但我认为我们在这里走的是正确的轨道。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="548016" URL"~/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1182727/lpstk-cc1352r-strange-problems-with-debugger/4497339 #4497339"]但是 、LPSTK-CC1352R 板没有该选项(或者、至少我没有得到它、我不知道它是否源于我使用 SEGGER J-link 的事实)[/quot]

    我相信您需要使用单独的 J-Link 控制面板来访问一些更高级的调试功能。 有关 更多详细信息、请查看控制面板的文档。

    Ki