你好,
我按照Sample128 Doc,我修改了它添加了新的特征和更多。
现在我需要知道我应该从应用程序任务发送到任务配置文件以进行更新特征的任务配置文件(在示例特征2)。
在示例中,我看到了两个更新特征的功能2:
///连接状态处理程序定义。
const struct ke_msg_handler sample128_connected [] =
{
{gattc_write_cmd_ind,(ke_msg_func_t)gattc_write_cmd_ind_handler},
{sample128_upd_char2_req,(ke_msg_func_t)sample128_upd_char2_req_handler},
};
我认为gattc_write_cmd_ind是发送的正确消息,但我不明白为什么还有sample128_upd_char2_req,其中有一个在连接处理程序上的检查:
//检查提供的值
if(param-> conhdl == gapc_get_conhdl(trelettra_env.con_info.conidx))
如何从应用程序任务中设置正确的inhdl?是正确的使用sample128_upd_char2_req?
设备:
sample128_upd_char2_req是要在要更新特征值时使用的。当中央将WRITE命令发送到DA14580,系统将由系统发送到您的配置文件任务的GATTC_WRITE_CMD_IND(IND)。
好的。谢谢。
我可以在中断例程中向自己发送来自Task_App的消息吗?
我通过Timer0中断尝试每300ms读取传感器。所以我在periph_setup上定义了一个回调函数:
timer0_register_callback(timer0_interrupt_function);
为了提高系统响应,在Timer0_interrupt_Function中未执行传感器读数。因此,我决定将邮件从Task_App发送到Task_App(本人),其中消息处理程序执行读取。在app_myproject.c中定义:
void timer0_interrupt_function(void){
//向自己发送消息
struct myproject_read * cfm = ke_msg_alloc(myproject_read,task_app,task_app,myproject_read);
KE_MSG_SEND(CFM);
}
App_default_state Handler中声明的处理程序ID:
{myproject_read,(ke_msg_func_t)myproject_read_handler},
此外,消息枚举在MyProject_Task.h中定义,以及配置文件的其他消息。
此外,MyProject_Read_Handler在App_myProject_Task中声明和定义。
但是,当我运行调试器系统时,在ke_msg_alloc行的Timer0_interrupt_function上进入循环。
可能是什么问题呢?
如果在没有参数的情况下发送消息,则可以使用更简单的功能KE_MSG_SEND_BASIC:
ke_msg_send_basic(myproject_read,task_app,task_app);
在您的处理程序中,“param”参数应为const void *类型。
如果邮件发送在中断中不适用于良好的工作,请使用以下代码在调用ke_msg_send_basic之前唤醒BLE系统:
if(getBits16(clk_radio_reg,ble_enable)== 0){//ble时钟关闭
setbits16(gp_control_reg,ble_wakeup_req,1);
}
不起作用。循环在这里
0x000009ce 4b0d ldr r3,[pc,#52];@ 0x00000A04.
0x000009d0 881a ldrh r2,[r3,#0x00]
0x000009D2 4B0D LDR R3,[PC,#52];@ 0x00000A08
0 x000009d4 0491 lsl r1, r2, # 18
0x000009D6 D402 BMI 0x000009de
0x000009D8 6858 LDR R0,[R3,#0x04]
0x000009da 2800 cmp r0,#0x00
0x000009dc d0f7 beq 0x000009ce
在按下停止按钮后循环(我使用UVISION 5)。使用KE_MSG_SEND_BASIC指令运行代码到行上的断点,然后按步骤一行按钮和代码不会停止。我需要按STOP按钮停止执行。之后那里的代码循环。
我重新启动UVISION和DISCONNECT / RICONNECT设备。重新执行代码,直到断点(KE_MSG_SEND_BASIC)。现在,执行步骤指令,但光标从C代码窗口消失,只有拆卸窗口显示光标。在J-Link Cortex-M错误警报显示之前,执行继续执行某些指令:
“无法停止Cortex-M设备!请检查JTAG电缆”
在命令窗口中:
jlink错误无法读取寄存器9
jlink错误无法读取寄存器10
......
我认为问题是从不起作用的中断例程发送消息。我不知道为什么。
我用一个由中断例程设置的全局变量重写代码,在main_func上检查全局变量,此处发送到task_app的消息。以这种方式它的工作原理。