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.

[参考译文] LAUNCHXL-CC2650:未调用看门狗回调函数

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1247727/launchxl-cc2650-watchdog-callback-function-not-being-called

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

大家好!

我使用的是 Launchxl-CC2650。

BLE SDK 2_02_07_06

TI RTOS 2.21.1.08

CCS7.4

编译器 TI Ver.5.2.6。

我已经在 uart_echo 示例代码中添加了看门狗驱动程序的代码。

我可以看到 UART 可以成功在串行端口上打印。

CC2650也会在看门狗计时器到期时重新启动。

我正在对看门狗回调函数中的 UART 端口进行写入、但未调用该函数。

请帮助

谢谢!

D·萨尔维

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

    您好!

    感谢您与我们取得联系、

    我想说的是、如果你在重新启动之前在看门狗回调中写入 UART、那么你不会看到显示重新启动的原因。

    您是否在函数中使用了断点?

    此致、

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

     

    我已经尝试过放置断点。 但始终不会到达该断点、

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

    您能否在看门狗回调中为我提供 UART 打印的本地化信息?

    如果您没有删除看门狗中的 RESTART 函数、则之后的 RESTART 函数、调试模式下的优化可能会越过该断点。

    此致、

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

     

    对不起、我不知道您想说什么

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

    /*
     *  ======== uartecho.c ========
     */
    
    /* XDCtools Header files */
    #include <xdc/std.h>
    #include <xdc/runtime/System.h>
    /* BIOS Header files */
    #include <ti/sysbios/BIOS.h>
    #include <ti/sysbios/knl/Task.h>
    /* TI-RTOS Header files */
    #include <ti/drivers/PIN.h>
    #include <ti/drivers/UART.h>
    /* Example/Board Header files */
    #include "Board.h"
    #include <stdint.h>
    #include <ti/drivers/Watchdog.h>
    #include <ti/drivers/watchdog/WatchdogCC26XX.h>
    #include <stdio.h>
    #include <string.h>
    #define TASKSTACKSIZE     768
    
    Task_Struct task0Struct;
    Char task0Stack[TASKSTACKSIZE];
    
    /* Global memory storage for a PIN_Config table */
    static PIN_State ledPinState;
    
    Watchdog_Params params;
    Watchdog_Handle watchdog;
    uint32_t tickValue;
    
    /*
     * Application LED pin configuration table:
     *   - All LEDs board LEDs are off.
     */
    PIN_Config ledPinTable[] = {
    Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    PIN_TERMINATE };
    
    char str[] = "Watchdog System Reset Called\n";
    UART_Handle uart;
    /*
     *  ======== echoFxn ========
     *  Task for this function is created statically. See the project's .cfg file.
     */
    Void echoFxn(UArg arg0, UArg arg1) {
    	char input;
    	UART_Params uartParams;
    	const char echoPrompt[] = "Starting Watchdog application:\r\n";
    
    	/* Create a UART with data processing off. */
    	UART_Params_init(&uartParams);
    	uartParams.writeDataMode = UART_DATA_BINARY;
    	uartParams.readDataMode = UART_DATA_BINARY;
    	uartParams.readReturnMode = UART_RETURN_FULL;
    	uartParams.readEcho = UART_ECHO_OFF;
    	uartParams.baudRate = 115200;
    	uart = UART_open(Board_UART0, &uartParams);
    	if (uart == NULL) {
    		System_abort("Error opening the UART");
    	}
    	UART_write(uart, echoPrompt, sizeof(echoPrompt));
    	/* Loop forever echoing */
    	while (1) {
    		UART_read(uart, &input, 1);
    		UART_write(uart, &input, 1);
    	}
    }
    
    void UserCallbackFxn(UArg watchdog);
    //typedef void (*Watchdog_Callback)(uintptr_t);
    /*
     *  ======== main ========
     */
    int main(void) {
    	PIN_Handle ledPinHandle;
    	Task_Params taskParams;
    
    	/* Call board init functions */
    	Board_initGeneral()
    	;
    	Board_initUART();
    
    	//start watchdog initialization code
    	Board_initWatchdog();
    
    	/* Create and enable a Watchdog with resets enabled */
    	Watchdog_Params_init(&params);
    	params.resetMode = Watchdog_RESET_OFF;
    	params.callbackFxn = (Watchdog_Callback)UserCallbackFxn;
    	params.debugStallMode = Watchdog_DEBUG_STALL_ON;
    	watchdog = Watchdog_open(Board_WATCHDOG0, &params);
    	if (watchdog == NULL) {
    		System_printf("Failed to open Watchdog Driver\n");
    		System_flush();
    	} else {
    		System_printf("Watchdog Driver opened Successfully\n");
    	}
    	tickValue = Watchdog_convertMsToTicks(watchdog, 2000);
    	Watchdog_setReload(watchdog, tickValue);
    
    	/* Construct BIOS objects */
    	Task_Params_init(&taskParams);
    	taskParams.stackSize = TASKSTACKSIZE;
    	taskParams.stack = &task0Stack;
    	Task_construct(&task0Struct, (Task_FuncPtr) echoFxn, &taskParams, NULL);
    
    	/* Open LED pins */
    	ledPinHandle = PIN_open(&ledPinState, ledPinTable);
    	if (!ledPinHandle) {
    		System_abort("Error initializing board LED pins\n");
    	}
    
    	PIN_setOutputValue(ledPinHandle, Board_LED1, 1);
    	System_flush();
    
    	/* Start BIOS */
    	BIOS_start();
    
    	return (0);
    }
    void UserCallbackFxn(UArg watchdog) {
    	UART_write(uart, &str, sizeof(str));
    }
      附加了我的代码供您参考。

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

    好的、抱歉、我以为你一直在重置、同时尝试打印 UART 内容、很抱歉。

    您为什么不使用 watchdogCallback (uintptr_t watchdogHandle) 使用看门狗句柄而不是 uarg 参数进行回调?

    此致、

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

     纪尧姆、您好!

    我想我已经试过这个 watchdogCallback (uintptr_t watchdogHandle)。

    但我明天还是会再试一次

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

     纪尧姆、您好!

    大家好。

    我已经尝试了你的建议,但结果是一样的。

    如果你进一步指导我会更好

    此致

    德尼亚内什瓦尔  

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

    您好!

    下面是我认为可能正在发生的情况:

    • 触发看门狗中断。
    • 不清除看门狗计时器
    • 器件复位

    文档中明确指出不能从看门狗计时器回调中调用 BIOS API、我假设 UART_WRITE 操作是非阻塞的、所以可以启动写入操作、但由于器件被复位、因此永远不会完成该操作。

    换句话说、不能从看门狗计时器的回调中打印输出内容。

    不过、我们可以从回调中清除看门狗计时器、防止复位、并在回调中设置标志。

    然后、另一个任务可以检查此标志的状态并从非回调环境中输出你需要的任何数据。

    希望这有助于您更好地了解看门狗的工作方式、

    此致、

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

    您好!

    我已评论
    //uart_WRITE( uart,&st, sizeof (str ));

    现在、我只是尝试通过以下方式来打开 LED:


    PIN_setOutputValue (ledPinHandle、Board_LED1、1);

    但问题是  未调用 UserCallbackFxn

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

    您好!

    这种行为在预料之中、也不会起作用。 您只能在回调中设置标志并按该方式执行。

    此致、

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

    您好!

    正如您所说、

    它在文档中明确指出、不能从看门狗计时器回调中调用任何 BIOS API、

    您能告诉我这是在哪里写的吗?

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

    您好!

    您说:

    下面是我认为可能正在发生的情况:

    • 触发看门狗中断。
    • 不清除看门狗计时器
    • 器件复位

    如何实现?

    根据我的代码(见上文)、我已设置  

    params.resetMode = Watchdog_reset_off;

    那么、为什么您认为"器件复位"呢?

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

    请查看随附的图像

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

    我将重新分配该主题、因此您会找到相关的专家。

    我很抱歉我忘记了重置、但结果应该是一样的。

    ...

    正如 watchdog.h 文件中提到的、并非所有目标都支持指向回调的指针。

    因此、如果您查看位于 include 中的 watchdogCC26xx.h 文件、就会清楚地显示 "因此、从看门狗回调函数调用任何 OS API 都是不安全的。 这包括任何依赖于操作系统 API 的驱动程序调用。"

    ...

    此致、

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

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

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

    正如 watchdog.h 文件中提到的、并非所有目标都支持指向回调的指针。

    是的、但没有这样写:CC2650不支持它、

    所以、我来客户、它应该可以正常工作

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

     纪尧姆、您好!

    正如您所附加的屏幕截图所示、根据看门狗回调调用任何 OS API 都是不安全的

    但令我惊讶的是,在我结束时,相同的文件并没有这样说。 我想您使用的是更旧的驱动程序文件(更旧的 SDK 或 TIRTOS)

    此致、

    德尼亚内什瓦尔

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

    您好!

    我知道、您使用的 SDK 与我的 SDK 不同、因此我假设他们在新版本中添加了此说明。 (为了便于您参考、我无法访问  适用于 CC2650的 BLE SDK 2_02_07_06、因此我必须使用 CC2640的5_30、这基本上是相同的代码)

    无论如何、这应该是由您的回调函数造成的。 您能否运行看门狗示例并查看其是否起作用?

    此致、

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

    您好!

    到目前为止,我还没有找到任何解决办法。

    我想知道、您在使用哪个版本的 SDK。

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

    我正在使用最新的 SDK、但我想没有人会建议使用较旧的 SDK、  

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

    就像 你昨天说的,

    我将重新分配该主题、因此您会找到相关的专家。

    但没有人提出解决方案、

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

    如前所述、我拥有的 SDK 版本适用于 cc2640、因此 simplelink_cc2640r2_sdk_5_30_00_03可供参考。 正如我说过的、这两个器件的嵌入式软件是相同的。  

    该线程会被重新分配、只需等待适当的工程师进行应答即可。

    此致。

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

    正如我在此线程之初就向您提供的信息所说、我正在使用的器件、我正在使用的 SDK 和我正在使用的编译器。

    在这里没有提到 CC2640R2 SDK 的意义。

    昨天您说过将重新分配该线程、但在很多小时之后您尚未重新分配该线程

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

    尊敬的 Dnyaneshvar:

    我很抱歉没有尽快回到你的身边。 我明白、如果代码的行为方式与您所需的方式不同、这会让您感到多么沮丧。

    回到所面临的问题、您是否可以提供运行代码时寄存器的外观的屏幕截图? 执行此操作的方法是在配置看门狗之后立即设置一个断点、但启动计时器之前。 这样、我就可以更好地了解配置完成后寄存器的状态。

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

    再次问候 Dnyaneshvar,

    我更仔细地查看了 SDK 和您正在使用的器件、我发现您使用的器件比我最初认为您使用的旧。 对于这一误解、我深表歉意。 您是否还有时间检查器件上的寄存器、并可能提供所见内容的屏幕截图? 我将非常愿意帮助您进一步调试这一点。

    此致!
    阿赫尤特·雷

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

    您好 Achyut Ray、

    谢谢你的答复。

    我是否应该在以下位置插入断点:  

    看门狗= Watchdog_open (Board_WATCHDOG0、&params);

    然后查看寄存器状态。

    此致、

    德尼亚内什瓦尔

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

    您好  Achyut Ray、

    请查看随附的屏幕截图  

    德尼亚内什瓦尔  

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

    大家好、Dnyaneshvar、

    感谢您在打开看门狗手柄后提供了寄存器的屏幕截图。 寄存器看起来正确、我可以看到您进行的配置实际上都用在了正确的位置。 当您运行调试会话时、您说从不会在回调函数中到达断点。 你能看到在 ICSR 寄存器中设置了任何 NMI 中断吗? 这可以帮助我们了解是否实际发生了看门狗中断。 如果在您配置看门狗过期的时间内、此处没有发生任何活动、则不会发生看门狗过期中断、这将解释未调用回调。 您能检查一下吗、稍后再联系我吗?

    此致!
    阿赫尤特

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

    您好、Achyut Ray、

    感谢你的帮助。

    在孟买,到处都在下雨,到处都是水。 我将在我恢复工作后立即查看您建议的要点。

    此致、

    德尼亚内什瓦尔

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

    您好 Achyut Ray、

    请查看随附的 ICSR 寄存器屏幕截图

    谢谢!

    德尼亚内什瓦尔

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

    尊敬的 Dnyaneshvar

    感谢您附加图像。 我看到 NMIPENDSET 位为0、这表示尚未发生 NMI。 这将解释代码不转至回调的原因。 您能否尝试更改 WDT 的过期时间、以便它更快地过期、从而确保该位确实已设置?

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

    您好 Achyut Ray、

    我已将时间设置为500毫秒。

    但结果是相同的。

    德尼亚内什瓦尔

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

    这确实很奇怪。 您是否可以尝试启用测试模式来查看随后是否产生了中断?

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

      寄存器 INT_COUP 中的 Cause_INTR 位 持续切换

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

    很好! 这意味着产生了一个中断! 这是一件好事,现在你发送的图像更有意义. 如果您检查在我要求您发送 NMIPENDSET 图像时发送的映像、则字段 ISRPENDING 具有值1、这意味着在某个位置有一个挂起的中断。 能否在 WDT 超时时时时尝试打开复位? 执行此操作时、请记住从 ISR 中清除计时器、否则器件将复位。 当开启"复位"时、首次计时器到期时会生成中断。 如果 ISR 不清除计时器、则器件会复位。

    您可以在打开复位的情况下进行测试吗? 为了确保听起来不易理解、启用了复位、然后在 ISR 中将  

    Watchdog_clear(watchdog);
     作为第一行。 您能告诉我它对您的作用如何吗?

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

    您好!

    我添加了 Watchdog_Clear (看门狗)、其中在我随附的代码中显示了 A。

    /*
     *  ======== uartecho.c ========
     */
    
    /* XDCtools Header files */
    #include <xdc/std.h>
    #include <xdc/runtime/System.h>
    /* BIOS Header files */
    #include <ti/sysbios/BIOS.h>
    #include <ti/sysbios/knl/Task.h>
    /* TI-RTOS Header files */
    #include <ti/drivers/PIN.h>
    #include <ti/drivers/UART.h>
    /* Example/Board Header files */
    #include "Board.h"
    #include <stdint.h>
    #include <ti/drivers/Watchdog.h>
    #include <ti/drivers/watchdog/WatchdogCC26XX.h>
    #include <stdio.h>
    #include <string.h>
    #define TASKSTACKSIZE     768
    
    Task_Struct task0Struct;
    Char task0Stack[TASKSTACKSIZE];
    
    /* Global memory storage for a PIN_Config table */
    static PIN_State ledPinState;
    
    Watchdog_Params params;
    Watchdog_Handle watchdog;
    uint32_t tickValue;
    
    PIN_Handle ledPinHandle;
    /*
     * Application LED pin configuration table:
     *   - All LEDs board LEDs are off.
     */
    PIN_Config ledPinTable[] = {
    Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    PIN_TERMINATE };
    
    char str[] = "Watchdog System Reset Called\n";
    UART_Handle uart;
    /*
     *  ======== echoFxn ========
     *  Task for this function is created statically. See the project's .cfg file.
     */
    Void echoFxn(UArg arg0, UArg arg1) {
    	char input;
    	UART_Params uartParams;
    	const char echoPrompt[] = "Starting Watchdog application:\r\n";
    
    	/* Create a UART with data processing off. */
    	UART_Params_init(&uartParams);
    	uartParams.writeDataMode = UART_DATA_BINARY;
    	uartParams.readDataMode = UART_DATA_BINARY;
    	uartParams.readReturnMode = UART_RETURN_FULL;
    	uartParams.readEcho = UART_ECHO_OFF;
    	uartParams.baudRate = 115200;
    	uart = UART_open(Board_UART0, &uartParams);
    	if (uart == NULL) {
    		System_abort("Error opening the UART");
    	}
    	UART_write(uart, echoPrompt, sizeof(echoPrompt));
    	/* Loop forever echoing */
    	while (1) {
    		UART_read(uart, &input, 1);
    		UART_write(uart, &input, 1);
    	}
    }
    
    void UserCallbackFxn(Watchdog_Handle watchdog);
    //typedef void (*Watchdog_Callback)(uintptr_t);
    /*
     *  ======== main ========
     */
    int main(void) {
    	Task_Params taskParams;
    
    	/* Call board init functions */
    	Board_initGeneral()
    	;
    	Board_initUART();
    
    	//start watchdog initialization code
    	Board_initWatchdog();
    
    	/* Create and enable a Watchdog with resets enabled */
    	Watchdog_Params_init(&params);
    	params.resetMode = Watchdog_RESET_ON;
    	params.callbackFxn = (Watchdog_Callback)UserCallbackFxn;
    	params.debugStallMode = Watchdog_DEBUG_STALL_ON;
    	watchdog = Watchdog_open(Board_WATCHDOG0, &params);
    	if (watchdog == NULL) {
    		System_printf("Failed to open Watchdog Driver\n");
    		System_flush();
    	} else {
    		System_printf("Watchdog Driver opened Successfully\n");
    	}
    	tickValue = Watchdog_convertMsToTicks(watchdog, 3000);
    	Watchdog_setReload(watchdog, tickValue);
    
    	/* Construct BIOS objects */
    	Task_Params_init(&taskParams);
    	taskParams.stackSize = TASKSTACKSIZE;
    	taskParams.stack = &task0Stack;
    	Task_construct(&task0Struct, (Task_FuncPtr) echoFxn, &taskParams, NULL);
    
    	/* Open LED pins */
    	ledPinHandle = PIN_open(&ledPinState, ledPinTable);
    	if (!ledPinHandle) {
    		System_abort("Error initializing board LED pins\n");
    	}
    
    	PIN_setOutputValue(ledPinHandle, Board_LED1, 1);
    	System_flush();
    
    	/* Start BIOS */
    	BIOS_start();
    
    	return (0);
    }
    void UserCallbackFxn(Watchdog_Handle watchdog) {
    	Watchdog_clear(watchdog);
    	PIN_setOutputValue(ledPinHandle, Board_LED1, 0);
    	UART_write(uart, &str, sizeof(str));
    }
    

    但器件正在复位

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

    您好、Achyut Ray、

    我的代码或解决此问题的任何其他链接中是否有语法错误?

    dnyaneshvar

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

    尊敬的 Dnyaneshvar:

    您是否可以在 CCS 中将句柄视为变量? 我想知道句柄是否使用回调函数的正确地址进行更新。 我还有另一个问题、是要知道 NMI 位现在是否在中断寄存器中设置? 您的代码看起来很好、并且很恼人、它不起作用。

    此致!
    阿赫尤特·雷

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

    您好、Achyut Ray、

    请查看随附的屏幕截图

     

    德尼亚内什瓦尔

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

    与随附的图像相同、句柄不会使用 usercallback 函数的地址进行更新。

    也不会设置硬件属性、也不会创建看门狗对象。 我不确定我是否正确。  

    NMI 位仍未设置

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

    您好!

    它是否相关?

    userfxn 的地址为0x00003E88

    但 param 的值为 0x00003E89

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

    您看不到更新的原因是这些是局部变量。 您可以尝试关闭优化(如果尚未关闭)、然后将这些变量转换为易失性全局变量。 这样、您就可以从该文件中的任何位置随时访问它们、

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

    0x00003E88和0x00003E89不是保存在存储器位置的地址、而是保存在存储器位置的值。 地址位于右侧的一列。 例如、在您发送的图像中、这会使参数的地址为0x2000105C。 没有什么可担心的

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

    句柄定义 为

    易失性 Watchdog_Handle 看门狗;

    默认情况下、优化被"关闭"、如图所示。

    在 volatile 声明后、代码的行为没有变化  

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

    行为上的任何变化都没有意义。 但是、通过 Volatile Declaration、您可以查看数据结构以确认它们是否实际得到了更新。

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

    您好、Achyut Ray、

    关于我分享的屏幕截图、我应该查找哪些确切参数?

    德尼亚内什瓦尔

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

    尊敬的 Dnyaneshvar:

    对延迟回复深表歉意。 关于附加的屏幕截图、您能否检查 handle、object 和 hwAttrs 现在是否获得了回调函数的正确值? 检查了所有这些之后、可能需要考虑这个特定器件可能不支持回调到看门狗中断处理程序。

    此致!
    阿赫尤特·雷

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

    您好!

    请查看随附的句柄、对象和 hwAttrs 的屏幕截图

    该特定器件可能不支持回调看门狗中断处理程序、您可以在 CC2650看门狗上搜索 e2e 论坛。 很多人用过它。

    此致、

    德尼亚内什瓦尔