Thread 中讨论的其他器件:CC2650、 SYSBIOS
工具/软件:TI-RTOS
尊敬的先生/女士:
我正在使用信号量为 CC2640R2项目开发按钮功能。 我使用的是 CC2640R2 LAUNCHXL 开发板。
我的 button.c 代码基于 sensortag_keys.c 代码。
但是,我是否可以知道为什么当我 输入 Semaphore_pend (ButtonSemaphore、BIOS_WAIT_Forever)时, 我的按钮中断将不起作用。
如果没有 Semaphore_pend (ButtonSemaphore、BIOS_Wait_Forever);在我的静态 void button_TaskFxn (UArg0、UArg1)中、我的中断将起作用。
这意味着,当按下按钮时,程序将转至回叫函数 --> void button__Callback (PIN_Handle handle,PIN_ID pinId)。
这在 PIN_registerIntCb (ButtonInteruptPinHandle、button_Callback)中进行初始化。
以下是我的代码:
int main()
{
.
。
。
。
。
/*[KF]添加用于调试的按钮任务*/
button_CreateTask();
//启用中断并启动 SYS/BIOS */
BIOS_start();
返回0;
}
void button_taskTask (void)
{
Task_Params Params;
Task_Params_init (&CreateParams);
taskParams.stack = ButtonTask_params.stack
= Button_params.stack;task_params.stack = Button_params.stack;task_params.stack = Task_size_task_params.task_params.stack;task.
Task_construct(&ButtonTask, button_TaskFxn,&taskParams, NULL);
}
静态空 button_TaskFxn (UArg0,UArg1)
{
uint8_t debugButton2;
/*{KF] Initialize Button */
button_Init();
//应用程序主循环
对于(;)
{
uint32_t 事件;
Semaphore_pend (ButtonSemaphore、BIOS_WAIT_Forever);
debugButton2 = debugButton2 +1;
}
}
void button_Init (void)
{
button__reset ();
ButtonInteruptPinHandle = PIN_OPEN (&ButtonGpioState、ButtonPinTable);
PIN_registerIntCb (ButtonInteruptPinHandle、button_Callback);
Util_constructClock (周期时钟、button_clockHandler、
100、1000、false、0);
}
void button__Callback (PIN_Handle handle、PIN_ID pinId)
{
switch (pinId)
{
案例 Board_BTN2:
button__processKeyRight();
中断;
默认值:
/*不执行任何操作*/
break;
}
}void button__processKeyRight (void)
{
uint8_t debugButton;
if (PIN_getInputValue (Board_key_right))
{
按键&=~SK_KEY_RIGHT;
}
其他
{
键|= SK_KEY_RIGHT;
}
Semaphore_post (ButtonSemaphore);
debugRbutton = debugRbutton + debugRbutton;
}
按下按钮时、程序不会使 button__processKeyRight (void)无效以处理其数据。
请提供建议。
非常感谢。
谢谢、
KF
