⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
Eric Scammell
离线
最后一次露面:3年1周前
加入:2017-03-15 13:28
中止睡眠

我有一个中断连接到一个按钮,我用它来触发几个行为。
我发现在OTP之后的一些行为行为不端行为,我归因于睡眠模式,导致我丢失某处或中断操作,如DMA。
我正在尝试使用中断设置一个标志,以使这些行为在主循环中执行,因此我可以更好地控制事件的时序和顺序,但我有一个漏洞我正在努力关闭。
如果我的app_on_system_powered函数之间的中断触发返回goto_sleep并且禁用睡眠模式的中断然后我不能依赖于快速拾取的标志。

有没有办法让我中止睡眠模式,或者立即退出,如果机会之窗发生了什么事?我将app_going_to_sleep作为检查这种情况的机会,因为到那时中断已经被禁用了,但是我看不到任何明显的可以做的事情。

设备:
sts_dialog(未经验证)
嗨eric scammell,

嗨eric scammell,

请在SDK6.0.4查看BLE示例中查看SleepMode示例。如果您不调用中断,设备会再次唤醒,当按下按钮时,调用中断(不是唤醒中断),导致WFI,因此在这种情况下设备未睡眠。请给我更多关于“在OTP之后”的信息,你的目的是什么?

谢谢,

sts_dialog。

Eric Scammell
离线
最后一次露面:3年1周前
加入:2017-03-15 13:28
嗨sts,

嗨sts,

当我按下按钮时,我并不担心芯片已经休眠或将要休眠的情况。我用的是wkupct定时器,所以芯片会有良好的响应。
问题是,在我的App_on_system_powered的实现结束时存在一个非常小的窗口,以及准备睡眠的芯片(在Arch_main.c的行162-168期间)。在该窗口期间,如果调用我的中断,它将设置标志,然后芯片将睡眠。在这种情况下,标志不会被采取行动,直到芯片下一个醒来,这可能是几秒钟。我无法指望交换机中断以结束睡眠状态,因为它将在芯片停止在WFI上之前已清除。

我怀疑最简单的解决方案是从App_Gook_To_Sleep中提出中断如果我看到我的标志,那么WFI立即返回,但我看不到软件的简单方法。

关于OTP,我看到了一些在我的调试环境中不会发生的错误。当我向OTP提交一个程序时,会出现这些错误,此时它们变得非常难以诊断。我怀疑的OTP之前唯一的行为变化会给我的节目问题是睡眠模式,所以我正试图非常小心订购我的操作,以便他们没有被睡眠中断。

sts_dialog(未经验证)
你好,我们又见面了,

你好,我们又见面了,

在唤醒中断的情况下,BLE过程将延迟再次启动(从开头)。在其他情况下,当我之前提到的时,当禁用所有中断并且设备睡眠时,如果例如调用按钮的中断(它将待处理),WFI(将等待中断)并将启动手术开始。请检查是否已将缓冲区的数据放在保留存储器中,否则在睡眠模式下,数据将丢失。

谢谢,

sts_dialog。

Eric Scammell
离线
最后一次露面:3年1周前
加入:2017-03-15 13:28
你好,

你好,

我对代码的解释允许有可能,如果中断在完全错误的时间触发,则为以下事件序列:

1)决定在app_on_system_powered与goto_sleep返回
2)触发中断,并变成待处理
3)中断是服务的
4)禁用中断以准备睡眠模式
5)WFI.

如果发生这种情况,则在WFI处不再是未决的中断。
这对我来说是一个问题,因为我的中断的首选实现要求在中断进行中断后立即调用app_on_system_powered。
我并不担心在app_on_system_powered未发生的行动,因为我的标志处于保留记忆,但它需要在几十或数百毫秒内发生。如果在这种情况下无法依赖逃避睡眠模式,则延迟可能比。

我是否误解了这种可能性,或者我没有清楚地传达我所需要的?

sts_dialog(未经验证)
你好,

你好,

ISR将调用ARCH_FORCE_ACTE_MODE()函数来停止睡眠模式。此事件设置Sleep_mode = mode_active。在使用标志的位置,将使用ARCH_RESTORE_SLEEP_MODE()函数。

谢谢,

sts_dialog。

主题锁定