社交距离示例硬件定时器未运行

⚠️
大家好. .谢谢你来参加论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,并包含在Dialog主网站中。所有的帖子和账户都已迁移。我们现在只接受新论坛的流量-请张贴任何新的线程//www.xmece.com/support.我们将在未来几天修复漏洞/优化搜索和标签。
3个职位/ 0个新
最后发表
jagath52
离线
最后看到:2周4天前
加入:2020-07-06晚
社交距离示例硬件定时器未运行

你好

我使用社交距离标签的例子与Wira sdk。

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

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

空白_timer_init(空白)

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);

空白_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

printf("*** TIMER1 demo ***\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);

For (;;) {

/*在每个循环中通知看门狗*/
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函数中创建了定时器任务

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
离线
最后看到:1周19小时前
工作人员
加入:15 2013-12-06
嗨Jagath,

嗨Jagath,

我已经要求支持社交距离应用程序的Dialog团队调查此事。几天内就会有答复,

/ MHv

PM_Dialog
在线
最后看到:6分49秒前
工作人员
加入:2018-02-08 11:03
嗨Jagath,

嗨Jagath,

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

1.您正在使用用于OS-TICK的TIMER2。改变了这个,你就把FreeRTOS都搞砸了。这在我们的文档中也有描述。例如,您可以将TIMER2用于PWM,但不能重新配置它。

你可以使用操作系统定时器来代替,这更容易使用,它们也会根据TIMER2的滴答声被触发。

如果你想使用HW定时器,那么你可以使用定时器(又名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重定向为例,拿出应用程序的所有代码,并添加你的,它将看起来像工作,因为没有RTOS事件。RTOS和系统将不会为其他任何事情而唤醒,除非您触发它。

谢谢,PM_Dialog