你好,
我跟着SAMPLE128医生,我修改它添加新特性等等。
现在我需要知道消息应该发送从应用程序任务配置文件更新特征(例2)特征。
更新的例子我看到两个函数特点2:
/ / /连接状态处理程序定义。
const struct ke_msg_handler sample128_connected [] =
{
(ke_msg_func_t) gattc_write_cmd_ind_handler}, {GATTC_WRITE_CMD_IND
(ke_msg_func_t) sample128_upd_char2_req_handler}, {SAMPLE128_UPD_CHAR2_REQ
};
我推测GATTC_WRITE_CMD_IND发送的消息是正确的,但我不明白为什么还有SAMPLE128_UPD_CHAR2_REQ内部有一个检查连接处理程序:
/ /检查所提供的值
如果(param - > conhdl = = gapc_get_conhdl (trelettra_env.con_info.conidx))
如何正确设置conhdl从应用程序任务?是正确的使用SAMPLE128_UPD_CHAR2_REQ吗?
设备:
SAMPLE128_UPD_CHAR2_REQ是使用当你想更新特征值。指示GATTC_WRITE_CMD_IND(印第安纳州)是由系统发送到你的个人资料的任务当中央发送一个命令写入DA14580祝福。
好的。谢谢。
我可以从task_app自己中断例程发送信息吗?
我试着读一个传感器每300毫秒timer0中断。所以我在periph_setup定义一个回调函数:
timer0_register_callback (timer0_interrupt_function);
为提高系统响应、传感器读不是在timer0_interrupt_function执行。所以我决定发送消息从TASK_APP TASK_APP(自己),消息处理程序执行读。app_myproject.c中定义:
空白timer0_interrupt_function (void) {
/ /发送消息
struct myproject_read * cfm = KE_MSG_ALLOC (myproject_read, TASK_APP, TASK_APP myproject_read);
ke_msg_send (cfm);
}
处理程序id app_default_state中声明处理程序:
(ke_msg_func_t) myproject_read_handler}, {MYPROJECT_READ
还有enum myproject_task中定义的消息。h连同其他消息的概要文件。
还在app_myproject_task myproject_read_handler声明和定义。
然而当我运行调试器系统进入循环在timer0_interrupt_function KE_MSG_ALLOC行。
可能会出现什么问题?
如果你不发送消息参数,您可以使用更简单的函数ke_msg_send_basic:
ke_msg_send_basic (MYPROJECT_READ TASK_APP TASK_APP);
在处理程序中,“参数”应该const void *类型的参数。
如果消息发送不工作在一个中断,使用以下代码来唤醒BLE系统调用ke_msg_send_basic之前:
如果(GetBits16 (CLK_RADIO_REG BLE_ENABLE) = = 0){/ /祝福时钟是关闭的
SetBits16 (GP_CONTROL_REG BLE_WAKEUP_REQ 1);
}
是行不通的。这里的循环
0 x000009ce 4 b0d异地恋r3, [pc, # 52];@0x00000A04
881 0 x000009d0 LDRH r2, r3, # 0 x00]
0 x000009d2 4 b0d异地恋r3, [pc, # 52];@0x00000A08
0 x000009d4 0491 lsl r1, r2, # 18
0 x000009d6 D402 x000009de BMI 0
0 x000009d8 6858异地恋r0, r3, # 0 x04]
0 x000009da 2800 CMP r0, # 0 x00
0 x000009dc x000009ce D0F7 BEQ 0
循环后我按下停止按钮(我使用uVision 5)。与ke_msg_send_basic断点在直线上运行代码指令,之后按步骤一行按钮和代码不停止。我需要按停止按钮来停止执行。后循环的代码。
我重启uVision和断开/ riconnect设备。重新执行到断点的代码(ke_msg_send_basic)。现在一步一步执行指令,但从C代码窗口光标消失,只有拆卸窗口显示光标。执行继续对一些指令直到J-link cortex-M错误警报出现:
“无法阻止Cortex-M设备!请检查jtag电缆”
在命令窗口:
Jlink错误不能读寄存器9
Jlink错误不能读寄存器10
…
我认为问题是发送消息从中断例程是行不通的。我不知道为什么。
我重写代码与一个全局变量设定中断例程,全局变量检查task_app main_func这里消息发出。它以这种方式工作。