国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2025年07月18日(星期五)

2019年07月18日 | STM32CubeMX+FreeRTOS實(shí)驗(yàn)---使用兩個(gè)實(shí)例,共用一個(gè)task

發(fā)布者:靈感火花 來(lái)源: eefocus關(guān)鍵字:STM32CubeMX  FreeRTOS實(shí)驗(yàn)  task 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

    假如有兩個(gè)Task,行為類型,只是個(gè)別參數(shù)不一樣。那么可以使用同一個(gè)task,來(lái)實(shí)現(xiàn)兩個(gè)實(shí)例。這兩個(gè)實(shí)例是相互獨(dú)立的:Each created instance will execute independently

under the control of the FreeRTOS scheduler.


   以兩個(gè)LED的task任務(wù)為例子,假設(shè)LED1和LED2都是每1s變換一次。那么,建立2個(gè)task:分別是LED1Flash和LED2Flash,使用同樣的task入口:StartLEDFlashTask



生成iar工程后,在main.c中有 以下代碼


/* Create the thread(s) */

  /* definition and creation of LED1Flash */

  osThreadDef(LED1Flash, StartLEDFlashTask, osPriorityNormal, 0, 128);

  LED1FlashHandle = osThreadCreate(osThread(LED1Flash), NULL);

 

  /* definition and creation of LED2Flash */

  osThreadDef(LED2Flash, StartLEDFlashTask, osPriorityLow, 0, 128);

  LED2FlashHandle = osThreadCreate(osThread(LED2Flash), NULL);

只是一個(gè)定義


osThreadDef只是一個(gè)定義,把相關(guān)的內(nèi)容綁在一起,不是函數(shù)。

osThreadCreate才是一個(gè)函數(shù)。第二個(gè)參數(shù)就是*argument,對(duì)應(yīng)StartLEDFlashTask函數(shù)的輸入?yún)?shù)。


因此在osThreadDef之前加入code。


/*import user code,may be changed by stm32cubeMX*/

/*take attention */

    uint16_t led1pin,led2pin = 0 ; 

    led1pin = GPIO_PIN_4 ;

    led2pin = GPIO_PIN_5 ;

另外,osThreadCreate需要改成


 LED1FlashHandle = osThreadCreate(osThread(LED1Flash), (void *)(&led1pin));

 

LED2FlashHandle = osThreadCreate(osThread(LED2Flash), (void *)(&led2pin));

在StartLEDFlashTask函數(shù)改成

/* USER CODE BEGIN 5 */

    uint16_t * pxledpin ;

    pxledpin = (uint16_t *)argument ;

  /* Infinite loop */

  for(;;)

  {

    osDelay(1000);

    HAL_GPIO_TogglePin(GPIOA, (*pxledpin));

    

  }

  /* USER CODE END 5 */ 

 

兩個(gè)燈就能同時(shí)點(diǎn)亮和熄滅了 。


查看IAR內(nèi)嵌的FreeRTOS插件,可以看到,這兩個(gè)task只是共用代碼,但是stack和任務(wù)的優(yōu)先級(jí)是獨(dú)立的。



也就是說(shuō),在上面的代碼里面,pxledpin是task里定義的局部變量,是保存在任務(wù)的stack里面。因此兩個(gè)任務(wù)有兩個(gè)獨(dú)立的pxledpin變量。




假如需要兩個(gè)led分別閃爍,可以在main.c加入以下代碼


全局部分


typedef struct

{

uint16_t ledpin ;

uint32_t timer ;

}LEDFlashPara_TypeDef ;

 main主函數(shù)部分修改為


  LEDFlashPara_TypeDef led1para,led2para ;

  led1para.ledpin = GPIO_PIN_4 ;

  led1para.timer = 1000 ;

  

  led2para.ledpin = GPIO_PIN_5 ;

  led2para.timer = 500 ;

  

  /* Create the thread(s) */

  /* definition and creation of LED1Flash */

  osThreadDef(LED1Flash, StartLEDFlashTask, osPriorityNormal, 0, 128);

  LED1FlashHandle = osThreadCreate(osThread(LED1Flash), (void *)(&led1para));

 

  /* definition and creation of LED2Flash */

  osThreadDef(LED2Flash, StartLEDFlashTask, osPriorityLow, 0, 128);

  LED2FlashHandle = osThreadCreate(osThread(LED2Flash), (void *)(&led2para));


Task部分修改為

LEDFlashPara_TypeDef ledpara ;

ledpara = *( (LEDFlashPara_TypeDef *)argument) ;

   

  /* Infinite loop */

  for(;;)

  {

    osDelay(ledpara.timer);

HAL_GPIO_TogglePin(GPIOA, ledpara.ledpin);

  }

這樣兩個(gè)任務(wù)就能按照不同的頻率同時(shí)正常工作了

如果把task部分修改為以下代碼:


LEDFlashPara_TypeDef *pledpara ;

pledpara = (LEDFlashPara_TypeDef *)argument ;

   

  /* Infinite loop */

  for(;;)

  {

    osDelay(pledpara->timer);

HAL_GPIO_TogglePin(GPIOA, pledpara->ledpin);

  }

就會(huì)發(fā)現(xiàn)LED1的task正常翻轉(zhuǎn)幾次以后就無(wú)法正常翻轉(zhuǎn)了。




未完 待續(xù)



關(guān)鍵字:STM32CubeMX  FreeRTOS實(shí)驗(yàn)  task 引用地址:STM32CubeMX+FreeRTOS實(shí)驗(yàn)---使用兩個(gè)實(shí)例,共用一個(gè)task

上一篇:stm32 FreeRTOS中如何創(chuàng)建任務(wù)
下一篇:FreeRTOS學(xué)習(xí)筆記——基礎(chǔ)知識(shí)與移植(STM32F103)

推薦閱讀

隨著物聯(lián)網(wǎng)技術(shù)的進(jìn)步和普及,智能家居系統(tǒng)的實(shí)現(xiàn)逐步變得容易。智能家居能極大的提高人們的生活質(zhì)量,得益于家居系統(tǒng)的完善,而又如何確保單品完美接入您的智能系統(tǒng)嗎?近年來(lái),智能家居在中國(guó)掀起了一股不小的熱浪,智能家居經(jīng)過(guò)多年的洗禮,在我國(guó)已經(jīng)走過(guò)了概念普及階段,但是由于發(fā)展緩慢的問(wèn)題,智能家居行業(yè)并沒(méi)有得到普及,85%的消費(fèi)者表示只是聽(tīng)...
尼康曾于2013年2月22日發(fā)布了一篇《致尼康數(shù)碼單反相機(jī)D600用戶》公告。針對(duì)用戶指出的所拍攝畫面內(nèi)出現(xiàn)多個(gè)黑色顆粒狀影像的現(xiàn)象,免費(fèi)收回并作維修處理。數(shù)碼單反相機(jī)的結(jié)構(gòu)使得這一現(xiàn)象的徹底防止在技術(shù)上極其困難,而在某些罕見(jiàn)的情形下,這些塵埃在影像中非常明顯。距發(fā)布六年后,尼康將在2020年1月結(jié)束其傳感器維修服務(wù)。 D600傳感器 經(jīng)Nikon USA證...
CINNO Rsearch 產(chǎn)業(yè)資訊,中國(guó)面板市場(chǎng)中,日本設(shè)備業(yè)界開(kāi)展擠壓韓國(guó)戰(zhàn)略。通過(guò)超低價(jià)格供應(yīng)面板設(shè)備,搶占韓國(guó)企業(yè)地位。而不斷擴(kuò)張 LCDOLED 生產(chǎn)基地的中國(guó)廠商則是以大規(guī)模需求為理由助長(zhǎng)這種日韓設(shè)備企業(yè)間的流血競(jìng)爭(zhēng)。韓國(guó)業(yè)界呼吁,為了擺脫日企的擠壓確保穩(wěn)定需求,需要盡快提升競(jìng)爭(zhēng)力。 根據(jù)韓媒 Etnews 報(bào)道,HKC 湖南長(zhǎng)沙的 8.6 代大尺...
智能倉(cāng)儲(chǔ)的應(yīng)用已逐步成為一種趨勢(shì),但出于成本和技術(shù)的考慮,目前“玩家”基本都是各個(gè)行業(yè)的頭部企業(yè),高昂的成本和技術(shù)門檻足以讓中小企業(yè)望而卻步。然而,這并不表示中小企業(yè)不能夠進(jìn)行物流升級(jí)。共享智慧云倉(cāng),就是專為解決這一問(wèn)題而存在。?作為中國(guó)領(lǐng)先的現(xiàn)代倉(cāng)儲(chǔ)與現(xiàn)代物流服務(wù)商,上海寶時(shí)供應(yīng)鏈管理有限公司(簡(jiǎn)稱“寶時(shí)物流”)專注于為企業(yè)提...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved