嗨支持,
我的程度大胆的是外部adc每4ms采一卷数码,采集完毕后通过中间告诉mcu 14580,mcu开辟一个环形来存储adc and and and and and and and adc结果,当有5次结果时动词数据发离(通知),数码大小20bytes,即每20ms有一个包裹要发出,发表前先检查gattc_cmp_evt的到来,连接间隔设置为10-20ms,实际实际发布,当当后后不发数码,连接间隔为规律的18ms(大概),当动态通知时,连接间隔有时为18ms,有时为36ms,有时为54ms,每个连接间隔发布的数据包也不断,有时1次,有时2‰,有时3,4‰,这很不科学,连接间隔应该是不觉得因素影响的,为什么示波示波抓闻的波型显示这个结果?
下载是分支:
1。
枚举Arch_Main_Loop_CallBack_Ret user_App_On_ble_powered(void)
{
if(ptr_in!= ptr_out)//如果环数据缓冲区中剩下的数据,然后唤醒ble以通知
{
返回keep_powered;
}
返回goto_sleep;
}
2。
枚举ARCH_MAIN_LOOP_CALLBACK_RET USS_APP_ON_SYTEM_POWERED(void)
{
uint8_t tempdata [2];
int qrsdata_in;
if(adc_int_is_set)// ADC样本完成
{
ADS1115_GET_ADC_RESULT(TEMPDATA);
data_fifo [ptr_in] [adc_value_size *(1 + cycle_num)] = tempdata [0];//存储ADC样本导致环数据缓冲区
data_fifo [ptr_in] [adc_value_size *(1 + cycle_num)+ 1] = tempdata [1];//存储ADC样本导致环数据缓冲区
cycle_num ++;
if(cycle_num == cycle_num)// cycle_num = 5
{
data_fifo [ptr_in] [0] =(uint8_t)(计数器/ 256);//高字节
data_fifo [ptr_in] [1] =(uint8_t)(计数%256);//低字节
if(计数器== 0xffff)
{
计数器= 0;
标志=真;
}
柜台++;
if(标志){计数器= 0;标志= false;}
cycle_num = 0;
ptr_in ++;
if(ptr_in> = packet_number)ptr_in = 0;
adc_int_is_set = false;
返回keep_powered;//需要通知数据
}
adc_int_is_set = false;
}
返回goto_sleep;//无需通知数据
}
3.
static const struct arch_main_loop_callbacks user_app_main_loop_callbacks = {
.app_on_init = user_app_init,
.app_on_ble_powered = user_app_on_ble_powered,
.app_on_sytem_powered = user_app_on_sytem_powered,
.app_before_sleep = null,
.app_validate_sleep = null,
.app_ging_to_sleep = null,
.app_resume_from_sleep = null,
};
4.数据发离片,先先tx_is_Completed标志
uint8_t data_send_process(void)
{
如果(!tx_is_completed)返回0;//前者通知是完整的
data_to_notify(data_fifo [ptr_out],packet_size);//数据传输
ptr_out ++;
if(ptr_out> = packet_number)ptr_out = 0;
tx_is_completed = false;//清除tx_complete标志
返回0;
}
5.data_send_process()在换行的时候
静态内联void schedule_whle_ble_on(void)
{
// BLE时钟已启用
而(ble_is_powered()){
//设置了BLE事件结束。条件RF校准可以运行。
UINT8_T BLE_EVT_END_SET = KE_EVENT_GET(KE_EVENT_BLE_EVT_END);
//执行消息和事件
Rwip_schedule();
//
if(ble_evt_end_set)
{
uint32_t sleep_duration = 0;
rcx20_read_freq();
//如果您有足够的时间运行收音机的温度校准
if(lld_sleep_check(&sleep_duration,4))// 6插槽 - > 3.750 ms
//检查时间和温度以运行无线电校准。
条件_run_radio_cals();
}
//授予对申请的控制,尝试睡觉
//如果Applciation返回Goto_sleep
if(!app_asynch_trm())
休息;
// sdkimprovements需要测试!!我们可以添加以下条件并移动
//它从循环中出来
//我们可以考虑在app_asynch_trm之前把它放在
// if(getbits16(clk_ctrl_reg,running_at_xtal16m))
//执行printf进程
ARCH_PRINTF_PROCESS();
data_send_process();
}
}
6.TX_IS_CHOMPLETED置位,当上一页数数据发表完毕的时尚
void user_catch_rest_hndl(ke_msg_id_t const msgid,
void const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
开关(msgs)
{
案例custs1_val_ntf_cfm:
{
struct musts1_val_ntf_cfm const * msg_param =(struct custs1_val_ntf_cfm const *)(param);
交换机(msg_param->句柄)
{
案例ECG_IDX_DATA_VAL:
tx_is_completed = true;//设置前数据包完全传输
休息;
默认:
休息;
}
} 休息;
默认:
休息;
}
}
环境:
SDK5.0.3.
测试手机:iphone6及三星s6
布罗尔,
年轻
1.你可以是一下,SDK3.0.10里的吞吐工工程。
2.我的建议在enum arch_main_loop_callback_ret user_app_on_sytem_powered(void)里面只在收到中间的时代,发现消息出去,别的不适做。
在消息致理数量,拿adc的值之前,使用一下arch_force_active_mode oders,然后存储数码到。收满5个,直接直接。
户外,你可以参考穿越工程里的StreamDatad_send_data_packets_req_handler函数写法,直接去检查l2cap的队列,这样会比你通知通知返回值再决定决定继续发出快。
嗨gongyu_dialog,
补充:在上帝之外我就调arch_disable_sleep()使系统进入闲置,而是如果不望起的话,恐怕别理所说不起来这么大的数量吧,依托理论不知来源是指“data_send_process()“是”“arch_main_loop_callback_ret user_pow_powered()”,这两个闻到数
布罗尔,
年轻
1.ADC_INT_IS_SET是通话唤醒的中间断数设置的,还是gpio的中间数量?
2. ADS1115_GET_ADC_RESULT这这个数会有多大的时钟?
3.“在连接上之后我就arch_disable_sleep()使系统进入空闲状态”,//在你们的不错伸展的睡眠?
4.你可以评估一下你平等发起了一世的时钟,可以用rwble_get_clock遇到,一个头一代来差值,得到得到时。单位625us。
是加拉的,做的,做的,事情的,事情的,差不得。只不断再加,条件满足直接发出通知。读取adc值,幂,收满5个包直接发电通知出去)。有没有任务消息没被经理,BLE芯片就不会睡。
嗨gongyu_dialog,
3.连接上之迹为不言而喻延长睡眠的模式;
1.由于adc采样是在连接上之迹才行的,所以其中间断adc_int_is_set是由由通gpio的中间产后的;
我需要做个测试才得知得知,谢谢!
布罗尔,
年轻
简单来,是
.app_on_ble_powered = user_app_on_ble_powered,//收到异步中间后,直接发出消息
.app_on_sytem_powered = user_app_on_sytem_powered,//监管消息,缓冲区,决定是要要发给发题
那真正通知数码据这里的分数要在哪里,要在这里发布了数码呢?
我有衣服了,你较早前说过:
“enum arch_main_loop_callback_ret user_app_on_sytem_powered(void)里面只在收到中间的时代,发表消息出去,别的不用来做”
在又说:
“.app_on_sytem_powered = user_app_on_sytem_powered,//管理消息,缓冲区,决定是决定要发给发件人消息”
Syshring是要怎样,你再重新闻我把下顺序,谢谢!
布罗尔,
年轻
“写错了数”~~~
app_on_ble_powered里检查中间标记,然后发消息通讯采集资讯
app_on_system_powered里修理消息,写缓冲,在这里发出通知
嗨gongyu_dialog,
按照你的方法试了下,结果还是一般的,连接间隔。还有其它建议么?
布罗尔,
年轻
补充:
app_on_ble_powered跟app_on_system_powered两个返回要要经理,刚才的测试都是返回goto_sleep,望知悉,谢谢!