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

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
3个帖子/ 0新
最后一篇
Jagath52.
离线
最后一次露面:6个月1周前
加入:2020-07-06 10:40
社交距离的例子硬件定时器不运行

你好

我正在使用WIRA SDK的社交偏移标记示例。

我创建了一个计时器,每1分钟给出发生冲突,我通过创建一个单独的任务来测试GPIO处理示例,该任务在计时器ISR处理程序提供信号时运行。

我用社交疏散榜样的相同任务,但在这个整个应用程序中未运行

void _timer_init(void)
{
timer_config cfg = {
.clk_src = hw_timer_clk_src_int,
.prescaler = 0,

.mode = hw_timer_mode_timer,
.timer = {
.direction = hw_timer_dir_down,
.reload_val = 1671168,
.free_run = true,/ *计时器永远不会停止计数* /
},
};

hw_timer_init(hw_timer2,&cfg);

hw_timer_register_int(hw_timer2,_timer_overflow_cb);

}

void _timer_overflow_cb(void)
{

/ *清除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演示*** \ n \ r”);

_timer_init();
hw_timer_enable (HW_TIMER2);

Int8_t wdog_id;

/ *寄存器BLE_MULTI_LINK任务由看门狗监视* /
wdog_id = sys_watchdog_register(false);

os_event_create(tempevent);

为了 (;;) {

/ *在每个循环上通知看门狗* /
sys_watchdog_notify(wdog_id);
sys_watchdog_suspend(wdog_id);
os_event_wait(tempevent,os_event_forever);

printf(“有破开的内幕\ r \ n”);
hw_clk_delay_usec(1000000);

/ *简历看门狗* /
sys_watchdog_notify_and_resume(wdog_id);

}

}

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

静态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(“温度任务”,
Tempreadtask,
(void *)0,
1024,
os_task_priority_normal,
temp_task_h);
os_assert(os_status == os_task_create_success);

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

}

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

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

谢谢

Jagath.

设备:
mhv_dialog.
离线
最后一次露面:2个月5天前
职员
加入:2013-12-06 15:10
嗨Jagath,

嗨Jagath,

我已经问了对话团队支持社交疏散应用程序来调查这一点。期待几天后的答案,

/ mhv.

PM_DIALOG.
离线
最后一次露面:4天5小时前
职员
加入:2018-02-08 11:03
嗨Jagath,

嗨Jagath,

为我们的迟到的回复道歉 - 请看我的反馈:

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

您可以使用OS定时器,而是更容易使用,并且它们将根据Timer2滴答而触发。

如果要使用HW计时器,则可以使用计时器(AKA Timer1)或Timer3或Timer4。Timer1和Timer2是睡眠中唯一可用的。请参阅数据表更多信息。

2,在代码中的void _timer_overflow_cb(void)中,您使用的是在ISR上下文中不安全的Printf()。您不应该从ISR打印。

另外,在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 Retrarget尝试,请拿出应用程序的所有代码并添加了您的代码,它将出现类似的工作,因为没有RTOS事件。RTOS和系统不会唤醒除了触发它的其他方面。

谢谢,PM_DIALOG.