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

STM32CubeMX+FreeRTOS實(shí)驗(yàn)---使用兩個(gè)實(shí)例,共用一個(gè)task

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

    假如有兩個(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ù)



關(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ǔ)知識與移植(STM32F103)

推薦閱讀最新更新時(shí)間:2025-05-31 09:37

STM32CUBEMX開發(fā)GD32F303(6)----GPIO輸入函數(shù)說明
概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中進(jìn)行開發(fā),同時(shí)通過GD32303C_START開發(fā)板內(nèi)進(jìn)行驗(yàn)證。 硬件準(zhǔn)備 這里準(zhǔn)備了2塊開發(fā)板進(jìn)行驗(yàn)證,分別是GD32303C_START開發(fā)板。 管腳配置 在GD32303C_START開發(fā)板中,按鍵的管腳為PA0。 在STM32CUBEMX中,配置PA0為輸出管腳。 HAL_GPIO_ReadPin()函數(shù) 該函數(shù)的作用是讀取管腳的電平狀態(tài)。 通過簡單的按鍵按下亮燈,松開滅燈進(jìn)行演示,代碼如下。 if(HAL_GPIO_ReadPin ( GPIOA, GPIO_PIN_0) ) HAL_GPIO_WritePin(G
[單片機(jī)]
<font color='red'>STM32CUBEMX</font>開發(fā)GD32F303(6)----GPIO輸入函數(shù)說明
基于STM32U5 的 STM32CubeMX環(huán)境搭建
本次把玩的開發(fā)板是B-U585I-IOT02A,這款開發(fā)板的特色之處就是低功耗與M33內(nèi)核,低功耗參數(shù)如下: M33內(nèi)核是基于M4內(nèi)核基礎(chǔ)上進(jìn)行的功能拓展,主要具有TrustZone安全優(yōu)勢,針對物聯(lián)網(wǎng)產(chǎn)品的一顆MCU。而且B-U585I-IOT02A的主頻高達(dá)160MHz,閃存的2兆字節(jié)和SRAM的786千字節(jié)的大小,完全可以裝下應(yīng)用代碼。 接下來介紹一下B-U585I-IOT02A的硬件部分。 包裝還算是中規(guī)中矩,使用靜電袋防止硬件受損,還是很不錯(cuò)的。 開發(fā)板的正面。正面可以看到外設(shè)很多,有WiFi,藍(lán)牙,存儲(chǔ)也有,而且一般接口都引出了,十分方便,用戶到手即用。 開發(fā)板背面,有一顆F72
[單片機(jī)]
基于STM32U5 的 <font color='red'>STM32CubeMX</font>環(huán)境搭建
STM32CubeMX— 配置串口1 接收中斷
實(shí)驗(yàn)操作 1、打開cubemax ,芯片選取。 我們選取STM32F103RCt6 (根據(jù)實(shí)際情況選擇),LQFP64封裝的。然后鼠標(biāo)雙擊中間那個(gè)圈住的地方就可以進(jìn)入配置界面。 圖1、芯片選取界面 圖2、配置界面 如上圖: (1)、標(biāo)號1 為系統(tǒng)核心的配置,其中由晶振的配置。 (2)、標(biāo)號2為模擬量相關(guān)的外設(shè)配置,如adc,dac,等。 (3)、標(biāo)號3為定時(shí)器配置。 (4)、標(biāo)號4為通信相關(guān)的外設(shè)。比如串口,CAN等。 其他圖中有標(biāo)注。 2、晶振配置 晶振是單片機(jī)的時(shí)鐘來源,相當(dāng)于心臟,先添加晶振,點(diǎn)擊上圖編號1,然后出現(xiàn)下圖,在點(diǎn)擊RCC,進(jìn)入晶振
[單片機(jī)]
<font color='red'>STM32CubeMX</font>— 配置串口1 接收中斷
stm32CubeMx CAN 發(fā)送數(shù)據(jù)
平臺 STM32F429 軟件 STM32CubeMx 5.0.0 固件庫 STM32Cube_FW_F4_V1.23.0 目的: 實(shí)現(xiàn) CAN 的發(fā)送 一 簡介   CAN是控制器局域網(wǎng)絡(luò)(Controller Area Network, CAN)的簡稱,是由研發(fā)和生產(chǎn)汽車電子產(chǎn)品著稱的德國BOSCH公司開發(fā)了的,并最終成為國際標(biāo)準(zhǔn)(ISO11898)。是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。 在北美和西歐,CAN總線協(xié)議已經(jīng)成為汽車計(jì)算機(jī)控制系統(tǒng)和嵌入式工業(yè)控制局域網(wǎng)的標(biāo)準(zhǔn)總線,并且擁有以CAN為底層協(xié)議專為大型貨車和重工機(jī)械車輛設(shè)計(jì)的J1939協(xié)議。    由于 CAN 屬于異步通訊,沒有時(shí)鐘信號線,連接在同
[單片機(jī)]
<font color='red'>stm32CubeMx</font> CAN 發(fā)送數(shù)據(jù)
STM32CubeMX代碼生成和點(diǎn)亮LED
所需工具STM32CubeMX和Keil5 1、先打開STM32CubeMX軟件,點(diǎn)擊New Project新建工程; 2.在搜索框中搜索你的項(xiàng)目芯片; 3、搜索出來有兩個(gè)不同封裝的芯片,寫程序沒區(qū)別,但是這個(gè)軟件可以生成IO說明文檔,可能會(huì)導(dǎo)致文檔與實(shí)際封裝差異。選擇確定后雙擊~; 4、創(chuàng)建完工程,簡單介紹一下功能; 5、先配置時(shí)鐘樹,我使用的F429最大支持180M時(shí)鐘,我配置為最大時(shí)鐘。 6、我的板子LED是接在PA11上的,在搜索欄上搜索PA11,芯片PA11會(huì)一閃一閃的。 7、點(diǎn)擊PA11引腳,會(huì)出現(xiàn)下面畫面,我們選擇GPIO_Output 8、當(dāng)PA11選擇作為輸出時(shí),外設(shè)USB功
[單片機(jī)]
<font color='red'>STM32CubeMX</font>代碼生成和點(diǎn)亮LED
STM32CubeMX學(xué)習(xí)筆記4:printf( )重定向到USART串口輸出(參考官方例程)
MCU:STM32F103ZET6 IDE: MDK-ARM V5 +STM32CubeMX5.0.0 串口調(diào)試助手:SSCOM3.2 功能描述:USART1收到PC機(jī)發(fā)來的數(shù)據(jù)后原封不動(dòng)的返回給PC機(jī)顯示,但是C語言中printf函數(shù)默認(rèn)輸出設(shè)備是顯示器,要使用printf輸出到串口,需要將fputc里面的輸出指向串口,這一過程就叫重定向。 需要配置的只有USART1,配置過程非常簡單。 一. 在 Pinout&Configuration---System Core中: 1. 首先設(shè)置時(shí)鐘RCC的HSE(外部高速時(shí)鐘)為晶振模式:Crystal/ceramic Resonator 2. 設(shè)置系統(tǒng)SYS
[單片機(jī)]
<font color='red'>STM32CubeMX</font>學(xué)習(xí)筆記4:printf( )重定向到USART串口輸出(參考官方例程)
STM32F429(HAL庫)_USART串口發(fā)送&接收(使用STM32CubeMX)
一、HAL庫相關(guān)函數(shù) 1、串口發(fā)送/接收函數(shù) HAL_UART_Transmit();串口輪詢模式發(fā)送,使用超時(shí)管理機(jī)制 HAL_UART_Receive();串口輪詢模式接收,使用超時(shí)管理機(jī)制 HAL_UART_Transmit_IT();串口中斷模式發(fā)送 HAL_UART_Receive_IT();串口中斷模式接收 HAL_UART_Transmit_DMA();串口DMA模式發(fā)送 HAL_UART_Transmit_DMA();串口DMA模式接收 2、串口中斷函數(shù) HA
[單片機(jī)]
STM32F429(HAL庫)_USART串口發(fā)送&接收(使用<font color='red'>STM32CubeMX</font>)
STM32CubeMX圖形配置工具
STM32CubeMX是ST意法半導(dǎo)體近幾年來大力推薦的STM32芯片圖形化配置工具,允許用戶使用圖形化向?qū)蒀初始化代碼。 實(shí)際應(yīng)用中需配合STM32Cube庫來使用,如各類HAL庫。 ?STM32CubeMX和STM32Cube庫的關(guān)系 STM32CubeMX運(yùn)行需要兩個(gè)必要條件:java運(yùn)行環(huán)境和STM32CubeMX軟件。其中,Java運(yùn)行環(huán)境必須是V1.7及以上(安裝過程中如果提示在當(dāng)前網(wǎng)絡(luò)連接環(huán)境下……,那是因?yàn)榘惭b需要網(wǎng)絡(luò),解決方案是聯(lián)網(wǎng)或者下載脫機(jī)安裝包)。然后是安裝STM32CubeMX軟件,安裝好之后設(shè)置STM32cubeFX包的地址,可以專門設(shè)置一個(gè)文件夾用來存放所有用到的芯片HAL庫包。 安裝好這些軟
[單片機(jī)]
<font color='red'>STM32CubeMX</font>圖形配置工具
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章
隨便看看

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

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

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