色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FreeRTOS的任務創建與刪除

汽車電子技術 ? 來源:玩轉單片機 ? 作者:Julian ? 2023-02-10 14:43 ? 次閱讀

FreeRTOS 中,每個執行線程都被稱為”任務”。在嵌入式社區中,對此并沒有一個公允的術語,但我更喜歡用”任務”而不是”線程”,因為從以前的經驗來看,線程具有更多的特定含義。

創建任務的API函數(可以在tasks.c文件中找到)

BaseType_t xTaskCreate(  TaskFunction_t pxTaskCode,
              const char * const pcName,
              const uint16_t usStackDepth,
              void * const pvParameters,
              UBaseType_t uxPriority,
              TaskHandle_t * const pxCreatedTask )
typedef void (*TaskFunction_t)( void * );
typedef long BaseType_t
typedef unsigned long UBaseType_t
typedef void * TaskHandle_t;

參數

pxTaskCode:自己創建的任務函數的函數名,用于指向需要運行的任務

pcName:任務的名字,字符串型,名稱可以隨意起,一般與函數名相同

usStackDepth:任務堆棧大小(實際上申請到的是這里的4倍,單位為字, 4 個字節),設的太小任務 可能無法運行!

pvParameters:任務函數的參數,不需要傳參設為NULL即可

uxPriority:任務優先級,0~(configMAX_PRIORITIES-1),數值越大優先級越高,0 代表最低優先級

pxCreatedTask:任務句柄,實際是一個指針,也是任務的任務堆棧

返回值:

pdPASS:數值1,任務創建成功,且添加到就緒列表

錯誤代碼:負數,任務創建識別

刪除任務的API函數(可以在tasks.c文件中找到)

vTaskDelete( TaskHandle_t xTaskToDelete )

xTaskToDelete:要刪除的任務的任務句柄

臨界區

臨界區就是一段在執行的時候不能被中斷的代碼段。在多任務操作系統里面,對全局變量的操作不能被打斷,不能執行到一半就被其他任務再次操作。一般被打斷,原因就是系統調度或外部中斷。對臨界區的保護控制,歸根到底就是對系統中斷的使能控制。在使用臨界區時,關閉中斷響應,對部分優先級的中斷進行屏蔽,因此臨界區不允許運行時間過長。為了對臨界區進行控制,就需要使用信號通信,實現同步或互斥操作。

FreeRTOS數據類型(可以在portmacro.h文件找到)

#define portCHAR        char  
#define portFLOAT       float  
#define portDOUBLE      double  
#define portLONG        long  
#define portSHORT       short  
#define portSTACK_TYPE  uint32_t  
#define portBASE_TYPE   long

推薦應用時使用下面這樣定義數據類型

typedef int int32_t;  
typedef short int16_t;  
typedef char int8_t;  
typedef unsigned int uint32_t;  
typedef unsigned short uint16_t;  
typedef unsigned char uint8_t;

前綴初識

FreeRTOS 中,定義變量的時候往往會把變量的類型當作前綴,可以一眼知其類型。

char 型變量的前綴是 c

short 型變量的前綴是 s

long 型變量的前綴是 l

復雜的結構體,句柄等定義的變量名的前綴是 x

變量是無符號型的再加前綴 u,是指針變量則加前綴 p

函數名包含了函數返回值的類型、函數所在的文件名和函數的功能,如果是私有的函數則會加一個 prv(private)的前綴。

宏內容是由大寫字母表示,前綴是小寫字母,表示該宏在哪個頭文件定義

任務創建

#include "stm32f10x.h"
#include 
#include "FreeRTOS.h"
#include "task.h"


#define START_TASK_PRIO 1       //任務優先級
#define START_STK_SIZE 128      //任務堆棧大小
TaskHandle_t StartTask_Handler;     //任務句柄
void start_task(void *pvParameters);//任務函數


#define LED0_TASK_PRIO 2       //任務優先級
#define LED0_STK_SIZE 50       //任務堆棧大小
TaskHandle_t LED0Task_Handler;   //任務句柄
void led0_task(void *p_arg);     //任務函數


void LED_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;        //定義結構體變量

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  //開啟時鐘

  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;            //選擇你要設置的IO口
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;      //設置推挽輸出模式
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;     //設置傳輸速率
  GPIO_Init(GPIOC,&GPIO_InitStructure);                //初始化GPIO

  GPIO_SetBits(GPIOC,GPIO_Pin_0);             //將LED端口拉高,熄滅LED
}


int main( void ) 
{
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設置系統中斷優先級分組 4
  LED_Init(); //初始化 LED
  //創建開始任務
  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 )led0_task, 
    (const char* )"led0_task", 
    (uint16_t )LED0_STK_SIZE, 
    (void* )NULL,
    (UBaseType_t )LED0_TASK_PRIO,
    (TaskHandle_t* )&LED0Task_Handler
  );
  vTaskDelete(StartTask_Handler); //刪除開始任務
  taskEXIT_CRITICAL();   //退出臨界區
}


//LED0 任務函數
void led0_task(void *pvParameters)
{
  while(1)
  {
    if(GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_0))
    {
      GPIO_ResetBits( GPIOC, GPIO_Pin_0);
    }
    else
    {
      GPIO_SetBits( GPIOC, GPIO_Pin_0);
    }
    vTaskDelay(400);
  }
}

--END--

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5086

    文章

    19143

    瀏覽量

    306092
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62226
  • 線程
    +關注

    關注

    0

    文章

    505

    瀏覽量

    19705
收藏 人收藏

    評論

    相關推薦

    FreeRTOS介紹與基礎任務創建

    本篇介紹FreeRTOS與基礎任務創建
    的頭像 發表于 09-26 09:00 ?2434次閱讀
    <b class='flag-5'>FreeRTOS</b>介紹與基礎<b class='flag-5'>任務</b><b class='flag-5'>創建</b>

    FreeRTOS中的任務管理

    任務FreeRTOS 中最基本的調度單元,它是一段可執行的代碼,可以獨立運行。FreeRTOS 中的任務是基于優先級的搶占式調度,優先級高的任務
    的頭像 發表于 11-27 17:03 ?1041次閱讀

    Freertos vTaskDelete多次刪除多次創建同一個任務,出現內存不夠用效果怎么解決?

    我碰到一個問題,就是這個freertos,我創建任務1-->刪除任務1-->創建
    發表于 08-04 05:05

    ESP32--FreeRTOS任務創建刪除過程是怎樣的?

    ESP32--FreeRTOS任務創建刪除過程是怎樣的?
    發表于 01-14 06:02

    FreeRTOS任務創建過程

    FreeRTOS筆記(四):任務創建/刪除,掛起/解掛詳解在第二篇筆記中介紹了任務創建的API,
    發表于 02-08 06:10

    FreeRTOS創建任務的流程分享

    從零入門 FreeRTOS 操作系統之創建任務啟動方式在 main() 函數中將硬件和 RTOS 系統先初始化好,然后創建一個啟動任務后就啟
    發表于 02-11 06:59

    FreeRTOS任務的使用

    FreeRTOS學習筆記(二):任務創建/刪除,掛起/解掛上篇文章介紹了任務相關的基礎知識,本篇文章對F
    發表于 02-18 07:14

    FreeRTOS任務如何創建刪除

    FreeRTOS移植到Cortex-M3硬件平臺的文章中,我們已經見過任務創建API,但那篇文章的重點在于如何移植FreeRTOS,本文將重點放在
    的頭像 發表于 03-11 18:08 ?2947次閱讀

    FreeRTOS筆記(四):任務創建/刪除,掛起/解掛詳解

    FreeRTOS筆記(四):任務創建/刪除,掛起/解掛詳解在第二篇筆記中介紹了任務創建的API,
    發表于 12-04 19:36 ?15次下載
    <b class='flag-5'>FreeRTOS</b>筆記(四):<b class='flag-5'>任務</b><b class='flag-5'>創建</b>/<b class='flag-5'>刪除</b>,掛起/解掛詳解

    從零入門 FreeRTOS 操作系統之創建任務流程

    從零入門 FreeRTOS 操作系統之創建任務啟動方式在 main() 函數中將硬件和 RTOS 系統先初始化好,然后創建一個啟動任務后就啟
    發表于 12-07 18:36 ?7次下載
    從零入門 <b class='flag-5'>FreeRTOS</b> 操作系統之<b class='flag-5'>創建</b><b class='flag-5'>任務</b>流程

    #FreeRTOS學習筆記(二):任務創建/刪除,掛起/解掛

    FreeRTOS學習筆記(二):任務創建/刪除,掛起/解掛上篇文章介紹了任務相關的基礎知識,本篇文章對F
    發表于 12-23 19:56 ?2次下載
    #<b class='flag-5'>FreeRTOS</b>學習筆記(二):<b class='flag-5'>任務</b><b class='flag-5'>創建</b>/<b class='flag-5'>刪除</b>,掛起/解掛

    FreeRTOS高級篇2---FreeRTOS任務創建分析

    FreeRTOS基礎系列《FreeRTOS系列第10篇---FreeRTOS任務創建刪除》中
    發表于 01-26 17:42 ?23次下載
    <b class='flag-5'>FreeRTOS</b>高級篇2---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b><b class='flag-5'>創建</b>分析

    FreeRTOS系列第10篇---FreeRTOS任務創建刪除

    FreeRTOS移植到Cortex-M3硬件平臺的文章中,我們已經見過任務創建API,但那篇文章的重點在于如何移植FreeRTOS,本文將重點放在
    發表于 01-26 17:56 ?13次下載
    <b class='flag-5'>FreeRTOS</b>系列第10篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b><b class='flag-5'>創建</b>和<b class='flag-5'>刪除</b>

    RA FreeRTOS任務創建

    隨著嵌入式應用程序變得越來越復雜,單片機裸機開發已經無法滿足工程師對于復雜程序的需求。于是具有多任務調度和實時響應特性的RTOS便越來越受工程師們青睞。瑞薩RA系列MCU兼容FreeRTOS系統
    的頭像 發表于 03-10 14:35 ?1315次閱讀

    RA FreeRTOS任務創建

    隨著嵌入式應用程序變得越來越復雜,單片機裸機開發已經無法滿足工程師對于復雜程序的需求。于是具有多任務調度和實時響應特性的RTOS便越來越受工程師們青睞。瑞薩RA系列MCU兼容FreeRTOS系統
    的頭像 發表于 07-12 10:00 ?720次閱讀
    RA <b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b><b class='flag-5'>創建</b>
    主站蜘蛛池模板: 受喷汁红肿抽搐磨NP双性| 亚洲欧美国产旡码专区| 最近中文字幕MV高清在线视频 | 99在线免费视频| 色欲AV精品人妻一二三区| 国产麻豆91网在线看| 一个人视频日本在线观看| 牛和人交videos欧美| 国产99久久久国产精品免费看| 亚洲 欧美 清纯 校园 另类| 久久香蕉国产线看观看| 超碰caoporen国产| 亚洲精品另类有吗中文字幕| 恋夜秀场支持安卓版全部视频国产 | 射漂亮黑b丝女| 久久爱狠狠综合网| 成年人免费观看的视频| 亚洲精品国偷拍电影自产在线| 蜜芽视频在线观看视频免费播放| 囯产少妇BBBBBB高潮喷水一 | 最新无码国产在线视频9299| 日本熟妇多毛XXXXX视频| 黑吊大战白女出浆| xxnx日本| 一本之道高清视频在线观看| 日日噜噜噜夜夜爽爽狠狠图片| 九九精品视频一区二区三区| 成人小视频免费在线观看| 一手揉着乳头一手模仿抽插视频| 人妻夜夜爽99麻豆AV| 久久久久久久伊人电影| 国产成人精品系列在线观看| 最美白虎逼| 亚洲精品国产自在在线观看| 日本妈妈xxxx| 蜜柚视频高清在线| 黄色三级视频在线观看| 抽插妇女疯狂视频| 91久久偷偷做嫩草影院免费看 | 毛片网站在线观看| 国产综合自拍 偷拍在线|