国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù))

這篇具有很好參考價(jià)值的文章主要介紹了STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

STM32 CubeMX Freertos



前言

學(xué)習(xí)使用Freertos第一步
FreeRTOS 任務(wù)管理,您需要掌握以下幾個(gè)關(guān)鍵函數(shù):

1. xTaskCreate():用于創(chuàng)建一個(gè)任務(wù),需要指定任務(wù)函數(shù)、任務(wù)名稱、任務(wù)棧大小和優(yōu)先級(jí)等參數(shù)。
2. vTaskDelete():用于刪除一個(gè)任務(wù),可以由任務(wù)自身或其他任務(wù)調(diào)用。
3. vTaskDelay():用于使當(dāng)前任務(wù)進(jìn)入阻塞狀態(tài),延遲一段時(shí)間后再繼續(xù)執(zhí)行。
4. vTaskDelayUntil():類似于vTaskDelay(),但是可以實(shí)現(xiàn)周期性的延遲,使任務(wù)按照指定的時(shí)間間隔執(zhí)行。
5. vTaskSuspend()和vTaskResume():用于暫停和恢復(fù)一個(gè)任務(wù)的執(zhí)行,暫停后的任務(wù)將不會(huì)被調(diào)度執(zhí)行。
6. xTaskResumeFromISR():在中斷服務(wù)程序中恢復(fù)一個(gè)被掛起(暫停)的任務(wù)。
7. uxTaskPriorityGet()和vTaskPrioritySet():用于獲取和設(shè)置任務(wù)的優(yōu)先級(jí)。
8. uxTaskGetStackHighWaterMark():用于獲取任務(wù)棧的剩余可用空間大小,可以用來(lái)檢查任務(wù)是否使用了過(guò)多的??臻g。


一、STM32 CubeMX 配置

時(shí)鐘樹(shù)配置

STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

HAL時(shí)基選擇TIM1(不要選擇滴答定時(shí)器;滴答定時(shí)器留給OS系統(tǒng)做時(shí)基)

STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

使能串口,用于用于檢查實(shí)驗(yàn)現(xiàn)象

STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

使用STM32 CubeMX 庫(kù),配置Freertos

選擇CMISS_V1接口就可以滿足Freertos接口;且代碼量比CMISS_V2?。–MISS_V2支持更多的RTOS接口,所以代碼量比CMISS_V1多)
STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

創(chuàng)建任務(wù)

STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

二、實(shí)驗(yàn)一:創(chuàng)建兩個(gè)任務(wù),LED閃爍

STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

代碼如下(示例):

void LED1Task(void const * argument)
{
  /* USER CODE BEGIN LED1Task */
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,1);
     printf("LED滅\r\n");		// printf輸出字符串
     osDelay(1000);
  }
  /* USER CODE END LED1Task */
}

/* USER CODE BEGIN Header_LED2Task */
/**
* @brief Function implementing the LED2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED2Task */
void LED2Task(void const * argument)
{
  /* USER CODE BEGIN LED2Task */
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,0);
		 printf("LED亮\r\n");		// printf輸出字符串
     osDelay(2000);
  }
  /* USER CODE END LED2Task */
}

實(shí)驗(yàn)現(xiàn)象

STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)
STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

使用 vTaskDelayUntil()絕對(duì)延時(shí)

使能 vTaskDelayUntil函數(shù)
STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

void LED1Task(void const * argument)
{
  /* USER CODE BEGIN LED1Task */
 TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//獲取進(jìn)入的時(shí)間
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,1);
     printf("LED滅\r\n");		// printf輸出字符串
     vTaskDelayUntil(&xlaswketime,1000);
  }
  /* USER CODE END LED1Task */
}

/* USER CODE BEGIN Header_LED2Task */
/**
* @brief Function implementing the LED2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED2Task */
void LED2Task(void const * argument)
{
  /* USER CODE BEGIN LED2Task */
	TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//獲取進(jìn)入的時(shí)間
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,0);
		 printf("LED亮\r\n");		// printf輸出字符串
     vTaskDelayUntil(&xlaswketime,2000);
  }
  /* USER CODE END LED2Task */
}


三,實(shí)驗(yàn)二:刪除LED1任務(wù)和自身任務(wù)

/* USER CODE END Header_LED1Task */
void LED1Task(void const * argument)
{
  /* USER CODE BEGIN LED1Task */
 TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//獲取進(jìn)入的時(shí)間
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,1);
     vTaskDelayUntil(&xlaswketime,500);
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,0);
		 vTaskDelayUntil(&xlaswketime,500);
  }
  /* USER CODE END LED1Task */
}

/* USER CODE BEGIN Header_LED2Task */
/**
* @brief Function implementing the LED2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED2Task */
void LED2Task(void const * argument)
{
  /* USER CODE BEGIN LED2Task */
	TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//獲取進(jìn)入的時(shí)間
	printf("5s后刪除LED1任務(wù),再5S刪除自身任務(wù)\r\n");		// printf輸出字符串
  /* Infinite loop */
  for(;;)
  {
		
     vTaskDelayUntil(&xlaswketime,5000);//5秒
		 vTaskDelete(LED1Handle);
		 printf("刪除LED閃爍任務(wù)\r\n");		// printf輸出字符串
		 vTaskDelayUntil(&xlaswketime,5000);//5秒
		 printf("刪除自身任務(wù)\r\n");		// printf輸出字符串
	   vTaskDelete(NULL);
		 printf("正常情況不會(huì)打印這段話\r\n");		// printf輸出字符串

  }
  /* USER CODE END LED2Task */
}

實(shí)驗(yàn)現(xiàn)象

STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

四,實(shí)驗(yàn)三:任務(wù)的掛起和恢復(fù)

void LED1Task(void const * argument)
{
  /* USER CODE BEGIN LED1Task */
 TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//獲取進(jìn)入的時(shí)間
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,1);
     vTaskDelayUntil(&xlaswketime,500);
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,0);
		 vTaskDelayUntil(&xlaswketime,500);
  }
  /* USER CODE END LED1Task */
}

/* USER CODE BEGIN Header_LED2Task */
/**
* @brief Function implementing the LED2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED2Task */
void LED2Task(void const * argument)
{
  /* USER CODE BEGIN LED2Task */
	TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//獲取進(jìn)入的時(shí)間
	printf("5s后暫停,再5S恢復(fù)\r\n");		// printf輸出字符串
  /* Infinite loop */
  for(;;)
  {

     vTaskDelayUntil(&xlaswketime,5000);//5秒
	   vTaskSuspend(LED1Handle);
		 printf("暫停LED閃爍任務(wù)\r\n");		// printf輸出字符串
		 vTaskDelayUntil(&xlaswketime,5000);//5秒
		 vTaskResume(LED1Handle);
		 printf("恢復(fù)LED閃爍任務(wù)\r\n");		// printf輸出字符串
	
   
  }
  /* USER CODE END LED2Task */
}

實(shí)驗(yàn)現(xiàn)象

STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù)),STM32 CubeMX,Rtos,stm32,嵌入式硬件,單片機(jī)

總結(jié)

學(xué)會(huì) 任務(wù)管理: 需要掌握并熟練任務(wù)的創(chuàng)建、刪除、掛起、恢復(fù)和切換等操作,以及任務(wù)的優(yōu)先級(jí)和調(diào)度機(jī)制。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-650620.html

到了這里,關(guān)于STM32 CubeMX (Freertos任務(wù):創(chuàng)建、刪除、掛起、恢復(fù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【復(fù)習(xí)筆記】FreeRTOS(三)任務(wù)掛起和恢復(fù)

    【復(fù)習(xí)筆記】FreeRTOS(三)任務(wù)掛起和恢復(fù)

    本文是FreeRTOS復(fù)習(xí)筆記的第三節(jié),任務(wù)掛起和恢復(fù),使用的開(kāi)發(fā)板是stm32f407VET6,創(chuàng)建兩個(gè)任務(wù),task1負(fù)責(zé)閃爍LED,task2負(fù)責(zé)按鍵控制,當(dāng)按鍵按下時(shí)控制任務(wù)掛起,按鍵再次按下恢復(fù)任務(wù),并通過(guò)串口打印任務(wù)狀態(tài)。 上一篇文章: 【復(fù)習(xí)筆記】FreeRTOS(二)創(chuàng)建和刪除任務(wù) 首先

    2024年02月07日
    瀏覽(21)
  • 【STM32】利用CubeMX對(duì)FreeRTOS用按鍵控制任務(wù)

    【STM32】利用CubeMX對(duì)FreeRTOS用按鍵控制任務(wù)

    對(duì)于FreeRTOS中的操作,最常用的就是創(chuàng)建、刪除、暫停和恢復(fù)任務(wù)。 此次實(shí)驗(yàn)?zāi)繕?biāo): 1.創(chuàng)建任務(wù)一:LED1每間隔1秒閃爍一次,并通過(guò)串口打印 2.創(chuàng)建任務(wù)二:LED2每間隔0.5秒閃爍一次,并通過(guò)串口打印 3.創(chuàng)建任務(wù)三:通過(guò)KEY1實(shí)現(xiàn)對(duì)任務(wù)一的創(chuàng)建和刪除。 按鍵按下以后如果有任

    2024年02月13日
    瀏覽(37)
  • STM32 CubeMX (第二步Freertos任務(wù)通信:隊(duì)列、信號(hào)量、互斥量,事件組,任務(wù)通知)

    STM32 CubeMX (第二步Freertos任務(wù)通信:隊(duì)列、信號(hào)量、互斥量,事件組,任務(wù)通知)

    學(xué)習(xí)使用Freertos第二步 在 FreeRTOS 中,任務(wù)通信可以通過(guò)以下函數(shù)來(lái)實(shí)現(xiàn): xQueueCreate() :用于創(chuàng)建一個(gè)消息隊(duì)列。可以設(shè)置隊(duì)列長(zhǎng)度和每個(gè)消息的大小。 xQueueSend() :將一條消息發(fā)送到隊(duì)列中??梢赃x擇阻塞或非阻塞發(fā)送。 xQueueReceive() :從隊(duì)列中接收一條消息。可以選擇阻塞

    2024年02月11日
    瀏覽(24)
  • 基于STM32CubeMX創(chuàng)建FreeRTOS—以STM32F429為例

    基于STM32CubeMX創(chuàng)建FreeRTOS—以STM32F429為例

    目錄 1. 實(shí)驗(yàn)任務(wù) 2. 使用STM32CubeMX創(chuàng)建基礎(chǔ)工程 2.1 使用STM32CubeMX創(chuàng)建項(xiàng)目 2.2 創(chuàng)建新項(xiàng)目 2.3 時(shí)鐘設(shè)置 2.4 時(shí)鐘配置樹(shù) 2.5 修改時(shí)鐘基準(zhǔn),打開(kāi)串行調(diào)試 2.6 配置串口 2.7 配置狀態(tài)指示燈 2.8 FreeRTOS配置 2.9 配置工程輸出項(xiàng) 3. 代碼編輯 3.1 printf重映射 3.1.1 使用ARMCC 5編譯器時(shí)的print

    2024年01月22日
    瀏覽(20)
  • 【STM32&RT-Thread零基礎(chǔ)入門(mén)】 6. 線程創(chuàng)建應(yīng)用(線程掛起與恢復(fù))

    【STM32&RT-Thread零基礎(chǔ)入門(mén)】 6. 線程創(chuàng)建應(yīng)用(線程掛起與恢復(fù))

    硬件:STM32F103ZET6、ST-LINK、usb轉(zhuǎn)串口工具、4個(gè)LED燈、1個(gè)蜂鳴器、4個(gè)1k電阻、2個(gè)按鍵、面包板、杜邦線 在上一個(gè)任務(wù)中,通過(guò)停止命令把線程刪除后,線程在系統(tǒng)中就不存在了,也無(wú)法再使線程重新運(yùn)行。例如輸入stop_led_thread命令后,led停止閃爍,但也無(wú)法重新開(kāi)啟LED燈閃爍

    2024年02月11日
    瀏覽(16)
  • 【STM32】使用CubeMX快速創(chuàng)建FreeRTOS的基礎(chǔ)工程,基于正點(diǎn)原子

    【STM32】使用CubeMX快速創(chuàng)建FreeRTOS的基礎(chǔ)工程,基于正點(diǎn)原子

    【STM32】HAL庫(kù) 新建MDK工程 【STM32】HAL庫(kù) 串口輪詢發(fā)送 【STM32】HAL庫(kù) LED閃爍、流水燈 【STM32】HAL庫(kù) 定時(shí)器中斷 【STM32】HAL庫(kù) 外部中斷 使用STM32F103C8T6開(kāi)發(fā)板,用STM32CubeMX配置FreeRTOS,可以適配正點(diǎn)原子FreeRTOS所有實(shí)驗(yàn)的基礎(chǔ)工程 HAL的時(shí)基不能選擇系統(tǒng)定時(shí)器 PA0和PA1輸出模式,

    2024年02月19日
    瀏覽(27)
  • FreeRTOS學(xué)習(xí)筆記—任務(wù)創(chuàng)建和刪除

    ?? 文章作者:二土電子 ?? 關(guān)注文末公眾號(hào)獲取其他資料和工程文件! ?? 期待大家一起學(xué)習(xí)交流! FreeRTOS 的任務(wù)創(chuàng)建和刪除相關(guān)的API函數(shù)有下面幾個(gè) xTaskCreate() 使用動(dòng)態(tài)的方法創(chuàng)建一個(gè)任務(wù) xTaskCreateStatic() 使用靜態(tài)的方法創(chuàng)建一個(gè)任務(wù) xTaskCreateRestricted() 創(chuàng)建一個(gè)使用 M

    2024年02月12日
    瀏覽(16)
  • STM32 CubeMX LwIP + freertOS 移植

    STM32 CubeMX LwIP + freertOS 移植

    開(kāi)發(fā)板: 官方 STM32F746? MCU型號(hào):STM32F746NGH 網(wǎng)卡型號(hào):LAN8742A? 原理圖如下 先用裸機(jī)測(cè)試LAN8742A的網(wǎng)卡驅(qū)動(dòng) 使用CubeMX創(chuàng)建工程 系統(tǒng)時(shí)鐘和時(shí)基定時(shí)器如下 無(wú)系統(tǒng)LWIP協(xié)議棧設(shè)置,靜態(tài)IP地址,關(guān)閉DHCP 生產(chǎn)代碼,下載進(jìn)開(kāi)發(fā)板。開(kāi)發(fā)板網(wǎng)口與電腦網(wǎng)口通過(guò)網(wǎng)線直連,設(shè)置電腦本

    2024年01月16日
    瀏覽(33)
  • 搭建STM32F407的Freertos系統(tǒng)(基于STM32CubeMX)

    搭建STM32F407的Freertos系統(tǒng)(基于STM32CubeMX)

    ? ? ? ?本人長(zhǎng)期開(kāi)發(fā)Linux、Windows上應(yīng)用軟件,一直以來(lái)MCU開(kāi)發(fā)有所接觸,但較少(最近項(xiàng)目需要,小公司么,都得會(huì),被逼的),好在有STM32CubeMX這樣工具,貌似就是我想要的工具。 ? ? ? ? 本次demo目標(biāo)立下: ? ? ? ? 1. 搭建或移植FreeRTOS到STM32上,畢竟對(duì)于長(zhǎng)期在Linux環(huán)境

    2024年02月10日
    瀏覽(31)
  • STM32cubemx對(duì)FreeRTOS的適配(工程模板配置)

    STM32cubemx對(duì)FreeRTOS的適配(工程模板配置)

    本篇文章將帶大家使用STM32cubemx對(duì)FreeRTOS進(jìn)行工程模板的配置。 1.開(kāi)始工程的創(chuàng)建: 2.芯片型號(hào)選擇: 3.修改時(shí)鐘為T(mén)IM8: 在FreeRTOS中SYSTICK需要為FreeRTOS提供心跳,故這里選擇TIM8替換SYNTICK。 4.配置RCC: 5.配置FreeRTOS: 6.開(kāi)啟串口方便調(diào)試和觀察: 7.工程路徑及編譯器選擇等:

    2024年02月07日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包