下面这个程序是个按键长按短按识别程序 ,程序在裸系统中能正常,在OS中无法正常运行,贴出OS程序求高手指点、 #include <stdio.h> #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "key.h" #include "FreeRTOS.h" #include "task.h" #include "queue.h" #include "stm32f10x.h" #include "stm32f10x_it.h" #include "NOK5110.h" #include "timer.h" /*************************************************************************/ #define START_TASK_PRIO 1 //任务优先级 #define START_STK_SIZE 128 //任务堆栈大小 TaskHandle_t StartTask_Handler; //任务句柄 void start_task(void *pvParameters); //任务函数 #define KEY_TASK_PRIO 12 #define KEY_STK_SIZE 128 TaskHandle_t KEYTask_Handler; void key_task(void *p_arg); void k2_Scan() { static int k2_cnt=0; static u8 k2_Lock=0; static u8 k2_Flag=0; if(KEY2) { k2_cnt=0; k2_Lock=0; //自锁 if(k2_Flag==1) //短按触发标志 { k2_Flag=0; K2Sec_1=1; //触发一号键的短按 printf("短按值:%d\r\n",K2Sec_1); } } else if(k2_Lock==0) { k2_cnt++; if(k2_cnt>20) { k2_Flag=1; //激活按键短按的有效标志 printf("激活值:%d\r\n",k2_Flag); } if(k2_cnt>1000) { k2_Flag=0; //清除按键短按的有效标志 k2_cnt=0; k2_Lock=1; //自锁按键置位,避免一直触发 K2Sec_2++; if(K2Sec_2>3)K2Sec_2=0; printf("长按值:%d\r\n",k2_Flag); } }; } /*************************************************************************/ int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); //设置系统中断优先级分组4 delay_init(); uart_init(115200); KEY_Init(); xTaskCreate((TaskFunction_t )start_task, //任务函数 (const char* )"start_task", //任务名称 (uint16_t )START_STK_SIZE, //任务堆栈大小 (void * )NULL, //传递给任务函数的参数 (UBaseType_t )START_TASK_PRIO, //任务优先级 (TaskHandle_t * )&StartTask_Handler); //任务句柄 vTaskStartScheduler(); //开启任务调度 } void start_task(void *pvParameters) { taskENTER_CRITICAL(); //进入临界区 //创建LED0任务 xTaskCreate((TaskFunction_t )key_task, //任务1 (const char* )"key_task", (uint16_t )KEY_STK_SIZE, (void * )NULL, (UBaseType_t )KEY_TASK_PRIO, (TaskHandle_t* )&KEYTask_Handler); vTaskDelete(StartTask_Handler); //删除开始任务 taskEXIT_CRITICAL(); //退出临界区 } void key_task(void * pvParameters) { while(1) { k2_Scan(); vTaskDelay(100 / portTICK_RATE_MS); //增加延时节拍函数 } } |
时基不一样,在裸机中,一般都是 20-50轮询,你TASK中是100了, |