久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1775|回復: 3
打印 上一主題 下一主題
收起左側

STM32程序在裸系統(tǒng)中能正常,在OS中無法正常運行,貼出OS程序求高手指點

[復制鏈接]
跳轉到指定樓層
樓主
ID:33544 發(fā)表于 2020-3-4 11:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
下面這個程序是個按鍵長按短按識別程序 ,程序在裸系統(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ù)
        }
        
        
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:697884 發(fā)表于 2020-3-4 13:46 | 只看該作者
可能是時間的問題,從結構上看應該沒有什么問題。
if(k2_cnt>20)
                     {
             k2_Flag=1;   //激活按鍵短按的有效標志
                                printf("激活值:%d\r\n",k2_Flag);
                     }
這是你判斷短按的時間,可能這里時間太長了,你按短按的時候,這個數(shù)字還沒有達到20.
你先改小這個值試一試,比如if(k2_cnt>2)或者if(k2_cnt>1)

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:33544 發(fā)表于 2020-3-7 10:47 | 只看該作者
我改過if(k2_cnt>1)也不行,不知何因
回復

使用道具 舉報

地板
ID:697884 發(fā)表于 2020-3-9 09:50 | 只看該作者
wis98 發(fā)表于 2020-3-7 10:47
我改過if(k2_cnt>1)也不行,不知何因

void k2_Scan()
{
        static int k2_cnt=0;
        static u8  k2_Lock=0;
        static u8  k2_Flag=0;
          printf("-k2_cnt=--:%d\r\n",k2_cnt);
如果能連串口的話就在這里打印一下,看你這個OS的建立的是不是正確,看這個函數(shù)會不會一直跑進來。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 福利视频网址 | 久久久久久久久久爱 | 久久精品国产亚洲一区二区三区 | 欧美激情一区二区 | 欧美日韩电影一区二区 | 亚洲一区二区三区欧美 | 亚洲a网 | 天天操天天射综合 | aaaa网站 | 日日日日日日bbbbb视频 | 日韩图区 | 欧美日高清 | 国产精品大全 | 成人av一区二区三区 | 激情五月综合网 | 99福利视频| 奇米四色在线观看 | 亚洲综合视频 | 欧洲一级毛片 | 狠狠干天天干 | 国产一区精品在线 | 亚洲v日韩v综合v精品v | 久久久国产一区二区三区 | 欧美一级视频在线观看 | 天天摸天天干 | 国产人成在线观看 | 九九av| 男女污污动态图 | 91成人在线视频 | 黄色免费网址大全 | 操操操操操 | 午夜国产羞羞视频免费网站 | 国产精品精品久久久 | 中国xxxx性xxxx产国 | 国产午夜在线 | 欧美xxxⅹ性欧美大片 | 午夜久久久久久久久久一区二区 | 亚洲中国字幕 | 狠狠艹| 亚洲久草 | 亚洲国产网 |