在DSPS设备项目中
第一步:
extern const struct ke\ u msg\ u handler user\ u spss\ u process\ u handlers[]=
{
{SPS\u SERVER\u CREATE\u DB\u CFM,(ke\u msg\u func\t)user\u SPS\u CREATE\u DB\u CFM\u handler},
{SPS\u SERVER\u ENABLE\u CFM,(ke\u msg\u func\t)user\u SPS\u SERVER\u ENABLE\u CFM\u handler},
{SPS\u SERVER\u DATA\u TX\u CFM,(ke\u msg\u func\t)user\u SPS\u SERVER\u DATA\u TX\u CFM\u handler},
{SPS\u SERVER\u DATA\u RX\u IND,(ke\u msg\u func\t)user\u SPS\u SERVER\u DATA\u RX\u IND\u handler},
{SPS\u SERVER\u TX\u FLOW\u CTRL\u IND,(ke\u msg\u func\t)user\u SPS\u SERVER\u TX\u FLOW\u CTRL\u IND\u handler},
{SPS\u SERVER ERROR\u IND,(ke\u msg\u func\t)user\u SPS\u SERVER ERROR\u IND\u handler},
{APP\u SAMPLE128\u TIMER,(ke\u msg\u func\t)SAMPLE128\u TIMER\u handler},
};
第二步:
int sample128\u timer\u handler(ke\u msg\u id\u t const msgid,
void const*参数,
任务id常量目标id,
ke_task_id_t const src_id);//声明
第三步:
int sample128\u timer\u handler(ke\u msg\u id\u t const msgid,
void const*参数,
任务id常量目标id,
ke\u task\u id\u t const src\u id)//定义
{
app\u timer\u set(app\u SAMPLE128\u timer,TASK\u app,600);
返回(已消耗的消息);
}
第四步:定时呼叫
无效用户\u ble \u pull(bool init,bool success)
{
if(初始化)
{
app\u timer\u set(app\u SAMPLE128\u timer,TASK\u app,600);
用户发送数据(p数据,长度);
}
其他{
用户发送数据(p数据,长度);
}
}
问题:
代码总是停在这里。。。。/**硬件故障\u handler**/。。。。
if((GetWord16(SYS\u STAT\u REG)&DBG\u IS\u UP)==DBG\u IS\u UP)
__asm(“BKPT#0\n”);
其他的
而(1);
有什么问题…我做的对吗??
嗨,普拉桑,
我想你已经宣布APP\u SAMPLE128\u TIMER作为SPS\u服务器的消息API中的消息,尽管我无法理解您的代码。从哪里触发定时器?当计时器结束时,它将执行sample128\u timer\u handler(),而不是用户\u ble\u pull,以便在特定的时间间隔内提取数据。似乎您得到的错误是因为如果您在代码中的某个地方调用用户table\pull表单,那么您会不断地分配相同的计时器。
只需放置app\u timer\u set(app\u SAMPLE128\u timer,TASK\u app,600);在on\u连接回调中,删除自定义用户\u ble\u pull并将所需的代码放入计时器处理程序函数中。
谢谢你的对话
无效用户连接(uint8\u t connection\u idx,struct gapc\u connection\u req\u ind const*param)
{
默认\u app \u on \u connection(connection \u idx,param);
用户\u gattc \u exc \u mtu \u cmd(连接\u idx);
应用程序\u轻松\u间隙\u参数\u更新\u启动(连接\u idx);
app_timer_set(app_SAMPLE128_timer,TASK_app,100);//timer_handler调用函数
arch_printf(“设备已连接\r\n”);
}
int sample128\u timer\u handler(ke\u msg\u id\u t const msgid,void const*param,ke\u task\u id\u t const dest\u id,ke\u task\u id\u t const src\u id)//定义
{
uint16长度;
uint8\u t vp[8]=“欢迎”;
结构sps\u server\u data\u tx\u req*req=KE\u MSG\u ALLOC\u DYN(sps\u server\u data\u tx\u req,
任务\ SPS\服务器、任务\应用程序、SPS\服务器\数据\发送\请求、长度);
需求->长度=长度;
memcpy(&req->数据[0],vp,sizeof(vp));
发送消息(请求);
app_easy_timer_cancel_all();
返回(已消耗的消息);
}
我是否在正确的位置使用了-app\u timer\u set(app\u SAMPLE128\u timer,TASK\u app,100)??我仍然面临着一些问题,我在int sample128\u timer\u handler中使用了断点-似乎处理程序没有执行…你能给我一个在dsp中运行app\u timer\u set代码的例子吗
嗨,普拉桑,
1将APP\u SAMPLE128\u计时器作为消息添加到SPS\u服务器任务的enum messages中。
2添加{APP\u SAMPLE128\u TIMER,(ke\u msg\u func\t)SAMPLE128\u TIMER\u handler},在user\u spss\u process\u handlers[]
三。添加以下代码段作为计时器的处理程序。
int sample128\u timer\u handler(ke\u msg\u id\u t const msgid,
void const*参数,
任务id常量目标id,
ke\u task\u id\u t const src\u id)//定义
{
arch_set_pxact_gpio();
app\u timer\u set(app\u SAMPLE128\u timer,TASK\u app,100);
用户发送数据(“伙伴”,6);
返回(已消耗的消息);
}
4添加app\u timer\u set(app\u SAMPLE128\u timer,TASK\u app,600);以在连接时开始计数(triigers the timer to start counting on connection)。
当您与设备建立连接时,计时器将触发,您将开始发送通知。
谢谢你的对话