你好
我正在使用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.

嗨Jagath,
我已经问了对话团队支持社交疏散应用程序来调查这一点。期待几天后的答案,
/ mhv.
嗨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.