在DSPS设备项目中
步骤1:
extern const struct ke_msg_handler user_spss_process_handlers [] =
{
{sps_server_create_db_cfm,(ke_msg_func_t)user_sps_create_db_cfm_handler},
{sps_server_enable_cfm,(ke_msg_func_t)user_sps_server_enable_cfm_handler},
{sps_server_data_tx_cfm,(ke_msg_func_t)user_sps_server_data_tx_cfm_handler},
{sps_server_data_rx_ind,(ke_msg_func_t)user_sps_server_data_rx_ind_handler},
{sps_server_tx_flow_ctrl_ind,(ke_msg_func_t)user_sps_server_tx_flow_ctrl_ind_handler},
{sps_server_error_ind,(ke_msg_func_t)user_sps_server_error_ind_handler},
{app_sample128_timer,(ke_msg_func_t)sample128_timer_handler},
};
第2步:
msgid,liment128_timer_handler(ke_msg_id_t const msgid,
void const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id);// 宣言
第3步:
msgid,liment128_timer_handler(ke_msg_id_t const msgid,
void const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)//定义
{
app_timer_set(app_sample128_timer,task_app,600);
return(ke_msg_consumed);
}
第4步:计时器呼叫
void user_ble_pull(bool init,bool成功)
{
如果(init)
{
app_timer_set(app_sample128_timer,task_app,600);
user_send_ble_data(p_data,长度);
}
别的 {
user_send_ble_data(p_data,长度);
}
}
问题 :
代码始终在这里停止.... / ** hardfault_handeler ** / ....
if((getword16(sys_stat_reg)&dbg_is_up)== dbg_is_up)
__asm(“bkpt#0 \ n”);
别的
而(1);
什么可能是问题......我正在做正确的方式吗?
嗨prasanth,
我想你宣布了app_sample128_timer作为sps_server的消息API中的消息,但我无法理解您的代码。从哪里触发定时器?当计时器经过时,它将执行示例128_timer_handler()而不是user_ble_pull以便以特定间隔提取数据。似乎你得到的错误是因为如果在代码中某处调用user_ble_pull形式,则会继续分配相同的计时器。
只是放置app_timer_set(app_sample128_timer,task_app,600);在On_Connection回调中,删除自定义user_ble_pull并将您想要的代码放在计时器处理程序函数中。
谢谢mt_dialog.
void user_on_connection(uint8_t connection_idx,struct gapc_connection_req_ind const * param)
{
default_app_on_connection(connection_idx,param);
user_gattc_exc_mtu_cmd(connection_idx);
app_easy_gap_param_update_start(connection_idx);
app_timer_set(app_sample128_timer,task_app,100);// timer_handler调用函数
ARCH_PRINTF(“设备连接\ r \ n”);
}
int sample128_timer_handler(ke_msg_id_t const msgid,void const * param,ke_task_id_t const dest_id,ke_task_id_t const src_id)//定义
{
uint16_t长度;
uint8_t vp [8] =“欢迎”;
struct sps_server_data_tx_req * req = ke_msg_alloc_dyn(sps_server_data_tx_req,
task_sps_server,task_app,sps_server_data_tx_req,长度);
req->长度=长度;
memcpy(&req-> data [0],vp,sizeof(vp));
KE_MSG_SEND(REQ);
app_easy_timer_cancel_all();
return(ke_msg_consumed);
}
我是我使用的 - app_timer_set(app_sample128_timer,task_app,100);在正确的地方?我仍然面临问题,我在int sample128_timer_handler里面使用了断点 - 似乎处理程序正在执行......你能告诉我一个例子,在dsps中为代码工作app_timer_set - 代码
嗨prasanth,
1.将App_sample128_timer添加为SPS_SERVER任务的枚举消息中的消息。
2.在user_spss_process_handlers []中添加{app_sample128_timer,(ke_msg_func_t)sample128_timer_handler} []
3.将以下代码段添加为定时器的处理程序。
msgid,liment128_timer_handler(ke_msg_id_t const msgid,
void const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)//定义
{
ARCH_SET_PXACT_GPIO();
app_timer_set(app_sample128_timer,task_app,100);
user_send_ble_data(“别人”,6);
return(ke_msg_consumed);
}
4.添加app_timer_set(app_sample128_timer,task_app,600);要在连接时开始计数(使计时器在连接时开始计数)。
与设备建立连接时,计时器将触发,并且您将开始发送通知。
谢谢mt_dialog.