假如有兩個(gè)Task,行為類型,只是個(gè)別參數(shù)不一樣。那么可以使用同一個(gè)task,來實(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,對應(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)先級是獨(dú)立的。
也就是說,在上面的代碼里面,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)幾次以后就無法正常翻轉(zhuǎn)了。
未完 待續(xù)
上一篇:stm32 FreeRTOS中如何創(chuàng)建任務(wù)
下一篇:FreeRTOS學(xué)習(xí)筆記——基礎(chǔ)知識與移植(STM32F103)
推薦閱讀最新更新時(shí)間:2025-05-31 09:37








設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- EVAL-ADG5248FEBZ,ADG5248F 過壓保護(hù) 8:1 多路復(fù)用器評估板
- EVAL-ADF7021DBZ3,基于 ADF7021 431 - 470 MHz ISM 頻段收發(fā)器的子板
- 使用 Analog Devices 的 LTC4162EUFD-SADM 的參考設(shè)計(jì)
- LT3091MPFE 產(chǎn)生極低輸出電壓的典型應(yīng)用
- 使用 Analog Devices 的 LT1173CN8 的參考設(shè)計(jì)
- AD9649-65EBZ,用于 AD9649BCPZ-65、單通道、14 位、65 MSPS 模數(shù)轉(zhuǎn)換器的評估板
- 帶有用于 NCV3063 1.5A 升壓開關(guān)穩(wěn)壓器的外部 NMOS 晶體管的典型升壓應(yīng)用原理圖
- NE555八音電子琴
- KITPF4210EPEVB: Evaluation board- PF4210, Power Management IC for i.MX 8M
- 使用 NXP Semiconductors 的 ISP1582 的參考設(shè)計(jì)
- iTOP-4412開發(fā)板-LinuxC-繼電器模塊的測試?yán)?/a>
- 賽輪思與梅賽德斯-奔馳合作 為EQS的MBUX系統(tǒng)提供增強(qiáng)智能
- Tiny4412模式跳轉(zhuǎn)
- 固態(tài)電池的5種構(gòu)型與現(xiàn)有研發(fā)水平及待攻關(guān)的關(guān)鍵技術(shù)
- 89C51中斷系統(tǒng)介紹(外部中斷)
- 第47章 STM32F429的SPI 總線應(yīng)用之SPI Flash的MDK下載算法制作
- STM32的GPIO詳細(xì)介紹
- 異構(gòu)集成推動(dòng)面板制程設(shè)備(驅(qū)動(dòng)器)的改變 異構(gòu)集成(HI)已成為封裝技術(shù)最新的轉(zhuǎn)折點(diǎn)
- STM32F1_ FSMC讀寫外部SRAM
- 蘋果被判侵犯3G專利,需向西班牙公司TOT賠償1.1億美元
- 從設(shè)計(jì)概念到 FPGA 原型僅需數(shù)分鐘,印度 InCore 完成 SoC Generator 平臺硅驗(yàn)證
- 消息稱因難尋客戶,三星推遲美國芯片工廠的完工時(shí)間
- BOE(京東方)聯(lián)合榮耀打造榮耀Magic V5 以領(lǐng)先LTPO技術(shù)打造行業(yè)新標(biāo)桿
- 華為ADS 4發(fā)布:多傳感器融合,提升自動(dòng)駕駛安全性
- 曉鶯說:線控制動(dòng)變革風(fēng)云
- 大眾商用車推出AirConsole 將其信息娛樂系統(tǒng)擴(kuò)展為游戲機(jī)
- 福州大學(xué)發(fā)明新機(jī)器視覺傳感器 可使機(jī)器人對極端光照做出超快反應(yīng)
- 蘋果獲沉浸式虛擬顯示器相關(guān)的專利
- 英特爾汽車“折戟”,十年布局一夜歸零
- ATtiny13 看門狗復(fù)位
- ATtiny13 控制和狀態(tài)寄存器MCUCSR
- ATtiny13 基準(zhǔn)電壓使能信號和啟動(dòng)時(shí)間
- 用51匯編完整寫一個(gè)函數(shù)
- 51單片機(jī)學(xué)習(xí)筆記——基于匯編語言(2)
- IBM首創(chuàng)2nm技術(shù),專家:難超過臺積電
- 哈工大開發(fā)微型發(fā)電機(jī),可捕獲皮膚熱量為可穿戴設(shè)備供電
- 富烯科技擬A股IPO 已經(jīng)進(jìn)行上市輔導(dǎo)備案
- “鴻鵠質(zhì)疑法”和撲朔迷離的諾基亞5G專利排名
- 臺灣突發(fā)人才“禁令”背后:產(chǎn)業(yè)與政治的雙重圖謀