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.

[参考译文] CC2674P10:为什么输入此函数

Guru**** 2455360 points
Other Parts Discussed in Thread: CC2674P10

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1543870/cc2674p10-why-enter-this-function

器件型号:CC2674P10


工具/软件:

你好 ​

 我运行演示“uart2echo_LP_EM_CC2674P10_nortos_ticlang",“,</s>、

内部 main (void)
  BOARD_INIT ();
  // inituart ();
  /*启动 NoRTOS */
  NoRTOS_START ();

  /*调用 mainThread 函数*/
  mainThread (NULL);

  while (1){}
}
void *mainThread (void *arg0)
  字符输入;
  const char echoPrompt[]=“回显字符:\r\n“;
  UART2_Handle UART;
  UART2_Params uartParams;
  size_t bytesRead;
  size_t bytesWritten = 0
  uint32_t status  = UART2_STATUS_SUCCESS;

  /*调用驱动程序初始化函数*/
  gpio_init ();

  /*配置 LED 引脚*/
  GPIO_setConfig (CONFIG_GPIO_LED_0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);

  /*创建默认读写模式阻塞的 UART */
  UART2_Params_init (&uartParams);
  uartParams.baudrate = 115200

  UART = UART2_OPEN (CONFIG_UART2_0、&uartParams);

  IF (UART = NULL)
  {
    /* UART2_OPEN () 失败*/
    while (1){}
  }

  /*打开用户 LED 指示灯以指示初始化成功*/
  GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);

  UART2_WRITE (UART、echoPrompt、sizeof (echoPrompt)、&bytesWritten);

  /*循环永久回显*/
  while (1)
  {
    bytesRead = 0
    while (bytesRead = 0)
    {
      状态= UART2_READ (UART、&INPUT、1、&bytesRead);

      IF (STATUS!= UART2_STATUS_SUCCESS)
      {
        /* UART2_READ() 失败*/
        while (1){}
      }
    }

    bytesWritten = 0
    while (bytesWritten == 0)
    {
      状态= UART2_WRITE (UART、&INPUT、1、&bytesWritten);

      IF (STATUS!= UART2_STATUS_SUCCESS)
      {
        /* UART2_write () 失败*/
        while (1){}
      }
    }
  }
}
当我测试演示时、为什么要输入此功能
Void
PRCMDEEPSLEEP (void)
  //启用深度睡眠。
  HWREG (NVIC_SYS_CTRL)|= NVIC_SYS_CTRL_SLEEPDEEP;

  //等待中断。
  CPUwfi()

  //禁用深度睡眠、以便将来的睡眠正常工作。
  HWREG (NVIC_SYS_CTRL) 且=~μ F (NVIC_SYS_CTRL_SLEEPDEEP);
}

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

    您好!

    输入此函数的原因可以通过调试固件来确定。 通过在软件中逐步移动并查看何时被阻止、可以使用 CCS 完成此操作。

    在 CCS 20 中、点击 “运行>调试项目“ 在电路板上刷写和调试项目。 你将被允许进入函数和更多,你将看到为什么你跳进这个函数。

    此致、
    Maxence

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

    你好

    此演示程序不调用此函数。 该芯片是否有任何未在程序中设置的默认设置?我发现在 mainThread 中运行 while (1) 后

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

    您好、

    演示程序可通过芯片的驱动程序调用此函数。 当只执行函数调用时、这可能很难找到。
    例如、 NoRTOS_START 可能会初始化电源管理驱动程序、该驱动程序可能会调用 PRCMDeepSleep 函数。

    这就是为什么调试和单步进入程序、或在 PRCMDeepSleep 中设置断点并观察调用栈是一个好主意。

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
      #define PRCMDEEPSLEEP          NOROM_PRCMDeepSleep
    这是整个文件中唯一的一个、和 NOROM_PRCMDeepSleep 未找到  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    该示例不仅包含一个文件、还包含多个源文件(添加到 CCS 工程中)以及编译时包含的其他源文件。 进入 PRCMDeepSleep 功能的原因可能是您的 UART 正在阻塞、这会导致系统在您等待 UART 数据读取或发送时进入睡眠状态。

    如果您运行调试器并在 PRCMDeepSleep 函数中的断点处停止、您的调用栈可能是 UART2_READ -> UART2_readTimeout -> SemaphoreP_PEND、并且由于没有任务处于活动状态、因此 IDLE 函数调用 PowerCC26XX_standbyPolicy -> PRCMDeepSleep、实际上就是 CPUwfi、因为 UART2 读取会禁用待机低功耗模式进入。

    此致、
    Maxence

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

    你(们)好

    理解比我想的更复杂。谢谢。