9 posts / 0 new
Last post
fxishui
Offline
Last seen:3 years 6 months ago
加入:2016-04-12 13:27
da14580 deep睡眠模式唤醒后程序逻辑问题

您好,
在da14580 deep睡眠模式唤醒后,我我需要检测满足一定条件才开始广播,不满足则继续睡眠;我把逻辑加 static void app_wakeup_cb(void)这个里面;
启动一个定时器去监测条件;
问题:
1、我在调试模式下运行唤醒逻辑正常,把程序烧写到otp后,程序在唤醒后跳过了条件检测这个逻辑;直接开始广播;
2、我尝试把 user_app_adv_start 这个回调函数换掉,在程序第一次广播之前就加上检测条件,结果还是一样的。
3、deep睡眠后唤醒程序执行逻辑和extended睡眠唤醒后执行差异在那个地方呢,这逻辑在extended睡眠模式下唤醒逻辑都是正常的。
谢谢!

Device:
Qinjiny_Dialog
Offline
Last seen:3 weeks 9 hours ago
Staff
加入:2016-11-01 05:47
你好,

你好,

Deep sleep和extented主要区别在于SysRAM也掉电了,这意味着醒来以后事实上程序又从OTP拷过来头跑起了,所以你在extended模式下做的事情没办法直接改成在Deep sleep下运作。

建议你看一看UM-B-006 Sleep mode Configuration 详细了解一下整个睡眠和唤醒的机制。

Extended无法满足功耗上的需求吗?

fxishui
Offline
Last seen:3 years 6 months ago
加入:2016-04-12 13:27
您好!

您好!
Extended 模式的功耗是满足要求的。我就是想利用deep模式每次唤醒都从头跑起,清一下内存和寄存器等;
目的是防止程序需要长时间运行才能暴露的bug和长时间运行可能出现的错误;这种情况您有什么好的建议呢?
谢谢!

index219
Offline
Last seen:1 year 2 months ago
加入:2016-05-23 07:00
你好

你好
请问下,你的580在extend sleep模式下不广播功耗电流瞬时值是多少? 广播瞬间值是多少?
我参考一下,谢谢。

fxishui
Offline
Last seen:3 years 6 months ago
加入:2016-04-12 13:27
我这边外围电路比较少,不广播的时候是二十几uA

我这边外围电路比较少,不广播的时候是二十几uA,广播的时候是一百多uA;待机时候是6uA的样子

index219
Offline
Last seen:1 year 2 months ago
加入:2016-05-23 07:00
你好,你说的”不广播的时候是二十几uA

你好,你说的”不广播的时候是二十几uA”是指的580处于active模式并且没有广播数据的时候?

Qinjiny_Dialog
Offline
Last seen:3 weeks 9 hours ago
Staff
加入:2016-11-01 05:47
抱歉之前的回复可能有些错误。Deep

抱歉之前的回复可能有些错误。Deep sleep醒来以后不一定会从头跑起,配置正确的话是能够回到之前的context开始继续跑的。Deep sleep虽然会让SysRAM也掉电,醒来每次都需要重新从OTP拿代码,但是有一部分retention RAM里面的数据不会丢掉。

你可以看看把你的逻辑相关的一些参量存在retention里面看看会不会有什么帮助

fxishui
Offline
Last seen:3 years 6 months ago
加入:2016-04-12 13:27
谢谢!

谢谢!
我这边加串口打印程序的运行轨迹,然后发现是有几个全局变量出了问题;
我在前面把变量初始化完,启动定时器去检测满足广播的条件,
结果第一次定时器触发进入,程序就跑偏了,判断那个值第一次明显不能进入那段逻辑的(变量的值不对),我怀疑是不是在deep模式下;内存使用大小受到限制;
您有没有遇到过这种情况呢;
谢谢!

fxishui
Offline
Last seen:3 years 6 months ago
加入:2016-04-12 13:27
是啊。如果是最小系统。程序只启动广播,不做其他的工作

是啊。如果是最小系统。程序只启动广播,不做其他的工作,电流随着你的广播频率跳动,大概2uA,广播一百多uA,跳动的频率跟广播的频率是一样的