学习合中出现的问题:
使用定时器周期性调用以下函数,试图周期性发送心率值到手机应用,传递给该函数的值是1从逐步递加到120的整数值,但当该值递加到70左右(从手机应用观察到),板子死机,之后与手机应用断开链接,就再也连接不上了。这大概是什么原因造成的?因为是初学者,麻烦提供思路。
空白app_hrps_meas_send (uint16_t hrp_val)
{
//在数据库中添加BASS
struct hrps_meas_send_req * req = KE_MSG_ALLOC(hrps_meas_send_req, TASK_HRPS,
TASK_APP hrps_meas_send_req);
申请- > conhdl = active_conhdl;
Struct hrs_hr_meas *phrs_hr_meas = &req->meas_val;
phrs_hr_meas - >标志= HRS_FLAG_HR_8BITS_VALUE;
phrs_hr_meas - > nb_rr_interval = 4;
phrs_hr_meas - > rr_intervals [0] = 10;
phrs_hr_meas - > heart_rate = hrp_val;
phrs_hr_meas - > energy_expended = HRS_HR_CNTL_POINT_CODE;
//发送消息
ke_msg_send(要求的);
}
以下是激活资料函数:
空白app_hrps_enable (uint16_t conhdl)
{
//分配消息
struct hrps_enable_req * req = KE_MSG_ALLOC(hrps_enable_req, TASK_HRPS, TASK_APP,
hrps_enable_req);
//填充参数结构
active_conhdl = conhdl;
申请- > conhdl = conhdl;
申请- > sec_lvl = get_user_prf_srv_perm (TASK_HRPS);
申请- > con_type = PRF_CON_NORMAL;/ / PRF_CON_DISCOVERY;
req->hr_meas_ntf_en = 0;//默认关闭通知。
/ /请求- > batt_level_ntf_cfg [0] = 0;//默认为关闭通知。
申请- > body_sensor_loc = 0;
//发送消息
ke_msg_send(要求的);
app_hrps_config((uint16_t)0, USE_HRPS_LEVEL_ALERT, GPIO_HRPS_LED_PORT, GPIO_HRPS_LED_PIN);
app_hrp_poll_start (APP_HRPS_POLL_INTERVAL);
}
你好,
有几个问题需要确认:
1.定时器用的哪个接口?定时周期是多少?将该部分的相关代码完整贴出来。
2.用凯尔调试模式的时候,观察到死机的位置是吗?
1、定时器定义代码如下:
app.h添加,见加粗字体
/// APP任务消息
enum APP_MSG
{
APP_MODULE_INIT_CMP_EVT = KE_FIRST_MSG (TASK_APP),
#如果BLE_PROX_REPORTER
APP_PXP_TIMER,
# endif / / BLE_PROX_REPORTER
#如果BLE_BAS_SERVER
APP_BATT_TIMER,
APP_BATT_ALERT_TIMER,
# endif / / BLE_BAS_SERVER
#如果BLE_HR_SENSOR
APP_HRPS_TIMER,
APP_HRPS_ALERT_TIMER,
# endif
启动定时器代码:
空白app_hrp_poll_start (uint16_t poll_timeout)
{
hrp_poll_timeout = poll_timeout;
app_timer_set (APP_HRPS_TIMER TASK_APP 10);//在100毫秒内进行第一次轮询
}
定时器事件处理代码:
Const struct ke_msg_handler app_hrps_process_handlers[]=
{
(ke_msg_func_t) hrps_create_db_cfm_handler}, {HRPS_CREATE_DB_CFM
(ke_msg_func_t) hrps_meas_send_cfm_handler}, {HRPS_MEAS_SEND_CFM
(ke_msg_func_t) app_hrps_cfg_indntf_ind}, {HRPS_CFG_INDNTF_IND
(ke_msg_func_t) app_hrp_timer_handler}, {APP_HRPS_TIMER
(ke_msg_func_t) app_hrp_alert_timer_handler}, {APP_HRPS_ALERT_TIMER
(ke_msg_func_t) hrps_disable_handler}, {HRPS_DISABLE_IND
};
Int app_hrp_timer_handler(ke_msg_id_t const msgid,
空白const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
app_hrp_lvl(); / /在这里发送心率值
app_timer_set (APP_HRPS_TIMER dest_id hrp_poll_timeout);
返回(KE_MSG_CONSUMED);
}
2、死机位置是:
空白wrap_platform_reset (uint32_t错误)
{
ASSERT_WARNING(错误= = RESET_AFTER_SPOTA_UPDATE);//在SPOTA重置的情况下不中断
platform_reset_func(错误);
}
以上,谢谢!
CYibin,你的好,问题已解决,系处理HRPS_MEAS_SEND_CFM事件时发了不适合的命令。
嗨zhongfushun,好的,感谢分享。