6个职位/ 0个新职位
最后发表
z20121202038
离线
最后看到:4年3个星期前
加入:2016-03-30 51
关于低功耗和注射用水();

你好,
最近,在测功耗,发现设备一直没有进入睡眠模式,于是我打开了da14580_config.h中扩展睡眠模式的宏。
/ * * /睡眠模式
#定义CFG_EXT_SLEEP
# undef CFG_DEEP_SLEEP
然后,JLINK连接到单板在线调试,发现设备完成第一次启动(因为我加了打印的),之后就进入睡眠模式了,然后再也起不来了,手机也扫描不到设备,一睡不醒了。
问题:
1)开启扩展睡眠模式,是不是不仅仅只是开这个宏,还要在main_func中添加唤醒蓝牙的接口函数,如果是,有没有范例。实际上,我的工程中是有定时器一直在工作的,时间到了,它会自动去开广告采数据,这个动作我是不希望停的,即使蓝牙天线关了,我的广告也要定时去采数据,采完就通过蓝牙上报。我之前理解,应该是系统中有新的消息事件出现时,系统应该就会自动被唤醒的。而定时器时间到了,就是一个消息事件啊,难道这个软件定时器一旦系统进入休眠模式,也会被关掉,那如果系统休眠期间我还是要定时采样,该怎么做呢?
2)注射用水();这个宏是不是等待中断事件,包括哪些啊,软件定时器消息算不算。
非常感谢,期待你的答复。

设备:
Gongyu_Dialog
离线
最后看到:1周2天前
加入:2016-04-27 07:07
1 .默认的唤醒函数接口在BLE_WAKEUP_LP

1 .默认的唤醒函数接口在BLE_WAKEUP_LP_Handler里面。如果你希望定时器在睡眠状态下仍起作用,需要用app_timer_set,即利用ke_timer,然后用消息的机制去触发处理函数。
2.注射用水是手臂的指令,如果当前有高优先级的中断来,就会退出休眠模式。你可以查看用NVIC_SetPriority函数设置的中断任务优先级,WKUP_QUADEC_IRQn = 1,是最高的。

z20121202038
离线
最后看到:4年3个星期前
加入:2016-03-30 51
谢谢你的回答。

谢谢你的回答。
1) app_timer_set最终也是调的ke_timer_set,我都是直接用的ke_timer_set,但是处理消息的应用不一样,我直接让APP_HT_TASK来处理这个消息,这样是没问题的吧。是不是定时器时间到了,系统会被唤醒?
2) BLE_WAKEUP_LP_Handler这个唤醒接口函数是不是每隔MAX_SLEEP_DURATION_EXTERNAL_WAKEUP(定义在arch.h, 0.625 ms)会自动调用一次,这个唤醒接口函数里面会重新初始化外设,那它还会回到主函数吗?主要我现在仅仅开启CFG_EXT_SLEEP宏之后,发现扫描不到广播包。

Gongyu_Dialog
离线
最后看到:1周2天前
加入:2016-04-27 07:07
1.对。但是可以看到里面也有函数ke_timer

1.对。但是可以看到里面也有函数ke_timer_sleep_check等做一些睡眠条件的检查,如果时间太短也会出现不睡的情况
2.这个接口是中断响应之后调用的。而这个宏MAX_SLEEP_DURATION_EXTERNAL_WAKEUP,只是设定的最长的睡眠时间。代码里面会随时更新sleep_duration的值。中断函数响应后,会回到主函数。
扫不到广播包,会不会你配置了外部32 k,但其实外部没有32 k时钟吗?

z20121202038
离线
最后看到:4年3个星期前
加入:2016-03-30 51
非常感谢你的回答。

非常感谢你的回答。
目前的主要问题是一睡不起。
1)我确实配置了外部32 k的时钟,但是硬件上我确实接了外部晶振。为进一步排除原因,我也把它改成“0 xaa”进行测试,发现仍然一样。
/*低功率时钟选择*/
#define CFG_LP_CLK 0x00 //0x00: XTAL32, 0xAA: RCX20, 0xFF: Select from OTP Header
2)目前我主要是用j-link仿真器进行在线调试,程序下载进去之后,初始化代码运行是正常的(因为我加了打印信息)。但是,出现以下两个现象:
一)初始化一段时间后,就自动进入扩展休眠模式了,而且是不能唤醒;
b)我把j-link仿真器断电(板子靠串口供电),此时程序能进入虚空BLE_WAKEUP_LP_Handler(空白),空白BLE_SLP_Handler (void)函数,同时从串口打印来,看我的定时器也在正常工作。但是手机无法搜索到该蓝牙设备,且工作一段时间之后,串口打印也消失了。
个人理解:
一)在arch_main.c的main_func函数中会配置睡眠模式(我设的扩展睡眠),然后而循环处理完所有的消息事件后,系统就自动进入休眠。那么,J-Link调试模式下是不是系统无法自动唤醒呢?
b)把J-Link仿真器断电,单板依然正常运行,是不是因为程序已经下载到sysRAM中,那为什么过段时间就会完全断掉呢?
c)手机无法找到该单板,是不是指,每次定时器时间到了,我还得主动发起广播,且保持一段时间?
期待您的指导,谢谢!

Gongyu_Dialog
离线
最后看到:1周2天前
加入:2016-04-27 07:07
一。对于580年J-link模式一般无法跟踪调试睡眠

一。对于580年J-link模式一般无法跟踪调试睡眠
b。正常情况下不应该会断掉。想问一下,如果你把外设全部都去掉,只保留580的最小系统,这样还有问题吗?
c。不需要。广播的指令只需发送一次就可以了。没有取消前,一直都会有效。