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.

[参考译文] CC3220SF-LAUNCHXL:在第二个线程中打开计时器始终失败。

Guru**** 2560390 points
Other Parts Discussed in Thread: CC3220SF, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/984173/cc3220sf-launchxl-opening-timer-in-second-thread-always-fails

器件型号:CC3220SF-LAUNCHXL
Thread 中讨论的其他器件:CC3220SFSysConfig

你好!

我尝试在应用程序中打开两个独立线程中的计时器、但失败了。  第一个选项正确打开、我可以在 CONFIG_TIMER_0或 CONFIG_TIMER_1上打开第一个选项。  第一个任务打开其计时器后、我尝试在另一个任务中打开另一个任务、但它失败了。  我正在使用 CC3220SF、该应用程序位于 TI-RTOS 4.40.00.07中。  任务是 pthread。  WHsystem.test()只打印出发送到函数中用于调试目的的2个参数。

这是来自第一个任务的代码(始终有效)

Timer_Params timerParams;
Timer_handle timer0;

timer_init();
Timer_Params_init (&timerParams);
timerParams.period = 1000;/* 1ms */
timerParams.periodUnits = Timer_Period_US;
timerParams.timerMode = Timer_Continuous_callback;

timerParams.timerCallback = mainScheduler;

timer0 = Timer_open (CONFIG_TIMER_0、&timerParams);

if (timer0 == NULL){
  /*初始化计时器失败*/
  WHsystem.test (__line__、__file__);
  while (1){}

如果(Timer_start (timer0)= Timer_STATUS_ERROR){
  WHsystem.test (__line__、__file__);
  /*无法启动计时器*/
  while (1){}

第二个任务计时器初始化如下所示:

// Timer_init();
Timer_Params_init (&timerParams);
timerParams.period = 500;/* 1ms */
timerParams.periodUnits = Timer_Period_US;
timerParams.timerMode = Timer_Continuous_callback;

timerParams.timerCallback = sensorScheduler;

Timer1 = Timer_open (CONFIG_TIMER_1、&timerParams);

if (Timer1 == NULL){
  /*初始化计时器失败*/
  WHsystem.test (__line__、__file__);
  while (1){}

如果(Timer_start (Timer1)= Timer_STATUS_ERROR){
  WHsystem.test (__line__、__file__);
  /*无法启动计时器*/
  while (1){}

在第二个任务初始化中、当 Timer1 = NULL (上面的粗体)时、我总是会在错误代码中结束。  当我在第二个任务中离开对 timer_init()的调用时,我甚至没有得到这么远的结果,这是有道理的,因为它应该将每个计时器初始化为默认值。  如果有人能帮助我了解第二个计时器设置失败的原因、我将不胜感激。

谢谢、

维也纳国际中心

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

    尊敬的 Vic:

    我看到 您在代码段中定义 timer0的位置、但看不到 Timer1。 请确保将它们定义为单独的句柄。

    在应用程序中只需要调用一次 timer_init(),但请确保在打开任一计时器之前调用它。

    您可以共享 SysConfig 配置吗?

    此致、

    Sarah

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

    您好、Sarah、

     感谢您的回复。  这些句柄是单独定义的、我只需重新使用相同的代码来设置它们、句柄是局部变量。  您确实向我指出了答案、不过...

     我从其中一个任务的内部删除了 Timer_init(),并在生成任何任务之前调用它,这解决了问题。  所以我想最重要的是调用 Timer_init(),在计时器打开之前,它是绝对调用的。

    感谢您的快速且有帮助的回复。

    维也纳国际中心