下面這個程序是個按鍵長按短按識別程序 ,程序在裸系統(tǒng)中能正常,在OS中無法正常運行,貼出OS程序求高手指點、
#include <stdio.h>
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "key.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "stm32f10x.h"
#include "stm32f10x_it.h"
#include "timer.h"
/*************************************************************************/
#define START_TASK_PRIO 1 //任務優(yōu)先級
#define START_STK_SIZE 128 //任務堆棧大小
TaskHandle_t StartTask_Handler; //任務句柄
void start_task(void *pvParameters); //任務函數(shù)
#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) //短按觸發(fā)標志
{
k2_Flag=0;
K2Sec_1=1; //觸發(fā)一號鍵的短按
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; //自鎖按鍵置位,避免一直觸發(fā)
K2Sec_2++;
if(K2Sec_2>3)K2Sec_2=0;
printf("長按值:%d\r\n",k2_Flag);
}
};
}
/*************************************************************************/
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); //設置系統(tǒng)中斷優(yōu)先級分組4
delay_init();
uart_init(115200);
KEY_Init();
xTaskCreate((TaskFunction_t )start_task, //任務函數(shù)
(const char* )"start_task", //任務名稱
(uint16_t )START_STK_SIZE, //任務堆棧大小
(void * )NULL, //傳遞給任務函數(shù)的參數(shù)
(UBaseType_t )START_TASK_PRIO, //任務優(yōu)先級
(TaskHandle_t * )&StartTask_Handler); //任務句柄
vTaskStartScheduler(); //開啟任務調度
}
void start_task(void *pvParameters)
{
taskENTER_CRITICAL(); //進入臨界區(qū)
//創(chuàng)建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(); //退出臨界區(qū)
}
void key_task(void * pvParameters)
{
while(1)
{
k2_Scan();
vTaskDelay(100 / portTICK_RATE_MS); //增加延時節(jié)拍函數(shù)
}
} |