1,用sdk5.0.4睡眠例程为基础创建的的工程,在扩展睡眠模式下,调式模式,程序烧写到otp,一切都正常,
2,当换到深睡眠模式,修改配置如下:
# undef CFG_MEM_MAP_EXT_SLEEP
#定义CFG_MEM_MAP_DEEP_SLEEP
const static sleep_state_t app_default_sleep_mode = ARCH_DEEP_SLEEP_ON;
还有就是把所有用到arch_set_extended_sleep()地方换为arch_set_deep_sleep ();
问题:
1,程序烧写到otp后,无法进入睡眠
2,我的广播设备名为固定的名字动态的加上mac地址;如对话框80 eaca000005; mac烧写在otpHeader里面的,第一轮广播的时候名字没有问题,但在第二轮广播后名字里面的mac部分就没有加上,我的名字逻辑部分添加在app.c里面的静态结构gapm_start_advertise_cmd * app_easy_gap_undirected_advertise_start_create_msg (void)这个函数里面的。
请问这是什么原因,怎么解决呢,谢谢!
设备:

1.你的方法应该没有问题,是不是在完成测试烧录OTP之前忘记把CFG_DEVELOPMENT_DEBUG去定义了?如果CFG_DEVELOPMENT_DEBUG还是定义过的话设备是无法进入深度睡眠的,因为
/* - SysRAM在深度睡眠模式下不关机。允许开发者使用Deep Sleep运行应用程序雷竞技安卓下载
2.不清楚你具体怎么做的名字逻辑,不过静态结构gapm_start_advertise_cmd * app_easy_gap_undirected_advertise_start_create_msg (void)都是从NVDS_TAG_DVICE_NAME里面拿设备名字的,可不可以试着在NVDS_TAG_DEVICE_NAME被调用之前把你的名字+地址写到NVDS_TAG_DEVICE_NAME里面吗?
您好,CFG_DEVELOPMENT_DEBUG是去定义了的。
我判断可能是这个函数无效user_app_adv_undirect_complete (uint8_t状态)里面的问题
如果sdk的睡眠例程里面这个函数这样写就睡眠不了
uint8_t advtimes = 0;
空白user_app_adv_undirect_complete (uint8_t状态)
{
if (status == GAP_ERR_CANCELED) / /取消取消
{
advtimes + +;
如果(advtimes > = 2)
{
advtimes = 0;
arch_ble_ext_wakeup_on ();
app_button_enable ();
}
其他的
user_app_adv_start ();
}
}
不知道这是什么情况?
应该是末尾那个user_app_adv_start()函数的问题,这个函数除了开始广播之外还做了其他事情,计划下一次的广播内容更新,重新准备广播内容,动态更新自定义生产商内容,设置deepsleep模式等等,你把它加在这里不太合适。
这个程序默认是广播10秒后停止广播,期间默认就是深度睡眠,只有在连接到设备的时候才会改成延长睡眠,修改睡眠模式的话只去关心那部分应该就行了。
你修改上面这个回电函数的目的应该是睡眠之前多广播几遍,其实可以直接修改APP_ADV_DATA_UPDATE_TO这个参量来改变10秒默认的时间来达到,这个函数最好保持原样。
我觉得你可以再看看嗯- b - 050文档的8.50部分开始,详细了解一下这个例程
哪儿可以下载到嗯- b - 050文档呢
网上就有