社交距离的例子硬件定时器不运行

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
3个帖子/ 0个新帖子
最后发表
jagath52
离线
最后看到:4个月2个星期前
加入:2020-07-06晚
社交距离的例子硬件定时器不运行

你好

我正在使用wiira sdk的社交距离标签示例。

我创建了一个计时器,每1分钟给中断,我测试它与gpio处理的例子,创建了一个单独的任务,当计时器isr处理器给出信号时运行。

同样的任务,我尝试了社会距离的例子,但在整个应用程序没有运行

空白_timer_init(空白)

Timer_config CFG = {
.clk_src = HW_TIMER_CLK_SRC_INT,
.prescaler = 0,

.mode = HW_TIMER_MODE_TIMER,
同学们= {
.direction = HW_TIMER_DIR_DOWN,
.reload_val = 1671168,
.free_run = true, /* Timer永不停止计数*/
},
};

hw_timer_init (HW_TIMER2 cfg);

hw_timer_register_int (HW_TIMER2 _timer_overflow_cb);

空白_timer_overflow_cb(空白)

/*清除TIMER1中断标志*/
hw_timer_clear_interrupt (HW_TIMER2);

printf("分钟+ + ");
hw_gpio_toggle (LED1_PORT LED1_PIN);
OS_EVENT_SIGNAL_FROM_ISR (tempEvent);

void tempReadTask(void *params)

printf("*** TIMER1演示***\ r");

_timer_init ();
hw_timer_enable (HW_TIMER2);

int8_t wdog_id;

/*将ble_multi_link任务注册为看门狗监控*/
wdog_id = sys_watchdog_register(假);

OS_EVENT_CREATE (tempEvent);

(,) {

/*在每个循环中通知watchdog */
sys_watchdog_notify (wdog_id);
sys_watchdog_suspend (wdog_id);
OS_EVENT_WAIT (tempEvent OS_EVENT_FOREVER);

printf (" intrrupt \ r \ n”);
hw_clk_delay_usec (1000000);

/*恢复看门狗*/
sys_watchdog_notify_and_resume (wdog_id);

我在sys_init函数中创建了计时器任务

static void system_init(void *pvParameters)

.........................................

OS_TASK_CREATE(“SDT-Task”,
sdt_ble_events_task,
空,
4096年,
SDT_RANGING_TASK_PRIORITY + 1,
处理);
OS_ASSERT(处理);
OS_BASE_TYPE os_status;

os_status = OS_TASK_CREATE(" temperature task",
tempReadTask,
(void *) 0,
1024年,
OS_TASK_PRIORITY_NORMAL,
temp_task_h);
OS_ASSERT (os_status = = OS_TASK_CREATE_SUCCESS);

.............

我尝试从prvsetuhardware()函数创建和启动定时器,而没有创建一个单独的任务,那么整个应用程序也不会运行

如果包含硬件计时器,则社交距离示例不会运行

谢谢你!

Jagath

设备:
MHv_Dialog
离线
最后看到:1周4天前
工作人员
加入:15 2013-12-06
嗨Jagath,

嗨Jagath,

我已要求支持“社交距离”应用程序的“对话”团队对此进行调查。期待几天后的答复,

/ MHv

PM_Dialog
离线
最后看到:2周2天前
工作人员
加入:2018-02-08 11:03
嗨Jagath,

嗨Jagath,

很抱歉我们回复晚了,请查看我的反馈如下:

1.您使用的是用于OS-TICK的TIMER2。通过改变这个,你会搞砸所有的FreeRTOS。这在我们的文档中也有描述。你可以使用的TIMER2 PWM为例,但不重新配置它。

你可以使用OS-Timers来代替,这甚至更容易使用,它们将基于TIMER2的滴答触发。

如果您想使用HW定时器,那么您可以使用timer (aka TIMER1)或TIMER3或TIMER4。只有TIMER1和TIMER2在睡眠中可用。请参阅数据表了解更多信息。

2、在void _timer_overflow_cb(void)中,你使用了printf(),这在ISR上下文中是不安全的。你不应该从ISR打印。

3.另外,在void tempReadTask(void *params)中你已经使用了hw_clk_delay_usec(1000000);为什么不使用命令OS_DELAY_MS()来暂停任务,让系统也进入休眠状态呢?hw_clk_delay_usec ();用于在延迟超时小于OS_TICK=2ms时执行循环操作的活动延迟。除此之外,你应该使用FreeRTOS API。

我建议先检查一下UM-B-092: DA1469x软件平台参考手册用户手册,以了解SDK架构和api。

您看到它在标准SDK上运行的“事实”并不能证明什么。如果你尝试使用FreeRTOS retarget,取出应用程序的所有代码并添加你的,它会看起来像工作,因为没有RTOS事件。RTOS和系统不会因为任何其他事情而唤醒,除非你触发它。

谢谢,PM_Dialog