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

⚠️
您好,谢谢您来到论坛。令人兴奋的消息!我们正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量-请在//www.wsdof.com/support.我们将在未来几天内修复bug/优化搜索和标记。
3个员额/0个新员额
最后一篇文章
jagath52
离线
最后一次见到:6个月1周前
加入:2020-07-06 10:40
社交距离示例硬件计时器未运行

你好

我正在Wira sdk中使用社交距离标记示例。

我创建了一个计时器,它每1分钟提供一次intrrupt,并使用gpio处理示例对其进行了测试,创建了一个单独的任务,该任务在计时器isr处理程序发出信号时运行。

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

void _timer _init(void)
{
计时器\u配置cfg={
.clk_src=HW_TIMER_clk_src_INT,
.预分频器=0,

.mode=HW\u定时器\u mode\u定时器,
.计时器={
.direction=HW_定时器_DIR_向下,
.reload_val=1671168,
.free_run=true,/*计时器从不停止计数*/
},
};

硬件定时器初始化(硬件定时器R2和cfg);

硬件定时器寄存器内部(硬件定时器R2,硬件定时器溢出cb);

}

无效\u计时器\u溢出\u cb(无效)
{

/*清除定时器1中断标志*/
计时器清除中断(计时器2);

printf(“分钟++”);
hw_gpio_开关(LED1_端口,LED1_引脚);
来自ISR的操作系统事件信号(临时事件);

}

}

void tempReadTask(void*params)
{
printf(“***定时器1演示***\n\r”);

_计时器_init();
硬件定时器启用(硬件定时器2);

int8_t wdog_id;

/*注册看门狗监视的ble_多链路任务*/
wdog_id=系统看门狗寄存器(假);

操作系统事件创建(临时事件);

对于(;;){

/*在每个循环中通知看门狗*/
系统看门狗通知(wdog\U id);
系统看门狗暂停(wdog\U id);
操作系统事件等待(临时事件,操作系统事件永远);

printf(“获得intrrupt\r\n”);
hw_clk_delay_usec(1000000);

/*恢复监督*/
系统看门狗通知和恢复(wdog id);

}

}

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

静态void系统_init(void*pvParameters)
{

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

操作系统任务创建(“SDT任务”,
sdt可执行事件任务,
无效的
4096,
SDT_测距_任务_优先级+1,
手柄);
OS_断言(句柄);
操作系统基本类型操作系统状态;

操作系统状态=操作系统任务创建(“温度任务”,
临时阅读任务,
(无效*)0,
1024,
操作系统任务优先级正常,
临时任务);
操作系统断言(操作系统状态==操作系统任务创建成功);

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

}

我尝试从prvSetupHardware()函数创建并启动计时器,但没有创建单独的任务,然后整个应用程序也没有运行

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

非常感谢。

贾加特

设备:
MHv_对话框
离线
最后一次见到:2个月5天前
工作人员
加入:2013-12-06 15:10
你好,贾加特,

你好,贾加特,

我已经要求支持社交距离应用程序的Dialog团队对此进行调查。期待几天内得到答复,

/MHv

PM_对话框
离线
最后一次见到:4天7小时前
工作人员
加入:2018-02-08 11:03
你好,贾加特,

你好,贾加特,

对于我们迟来的回复表示歉意-请参阅下面我的反馈:

1.您使用的是用于OS-TICK的TIMER2。更改此选项会使所有FreeRTO变得一团糟。我们的文档中也介绍了这一点。例如,您可以将定时器R2用于PWM,但不能对其进行重新配置。

您可以使用操作系统计时器,而操作系统计时器更易于使用,它们也会根据计时器2的滴答声触发。

如果你想使用HW定时器,那么你可以使用定时器(又名定时器1)或定时器3或定时器4。定时器1和定时器2是睡眠中唯一可用的。有关更多信息,请参阅数据表。

2、在代码中的void\u timer\u overflow\u 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和系统不会因为任何其他原因而唤醒,除非你触发它。

谢谢,下午好