【正點原子STM32連載】 第五十五章 FreeRTOS移植實驗 摘自【正點原子】APM32E103最小系統板使用指南

1)實驗平臺:正點原子APM32E103最小系統板
2)平臺購買地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套實驗源碼+手冊+視頻下載地址: http://www.openedv.com/docs/boards/xiaoxitongban

第五十五章 FreeRTOS移植實驗

前面章節中的實驗都是在裸機環境下實現,本章將介紹FreeRTOS的簡單使用,對RTOS感興趣的讀者,可以參考正點原子推出的FreeRTOS或μC/OS-III的全套教程資料,包含教學視頻、開發指南并配套有例程源碼。通過本章的學習,讀者將學習到FreeRTOS的簡單應用。
本章分為如下幾個小節:
55.1 硬件設計
55.2 程序設計
55.3 下載驗證

55.1 硬件設計
55.1.1 例程功能

  1. LED0由LED0任務控制80毫秒亮,920毫秒滅
  2. LED1由LED1任務控制300毫秒亮,300毫秒滅
    55.1.2 硬件資源
  3. LED
    LED0 - PB5
    LED1 - PE5
    55.1.3 原理圖
    本章實驗使用的FreeRTOS為軟件庫,因此沒有對應的連接原理圖。
    55.2 程序設計
    55.2.1 FreeRTOS的移植
    FreeRTOS的源碼可參考正點原子推出的《FreeRTOS開發指南》或相關的配套教學視頻至FreeRTOS的官網下載,也可在A盤6,軟件資料FreeRTOS學習資料中找到。
    FreeRTOS的移植請讀者參考正點原子推出的《FreeRTOS開發指南》或相關的配套教學視頻,在上述資料中,對FreeRTOS的移植和使用都做了非常詳細地介紹,是入門FreeRTOS的一個非常好的選擇。
    55.2.2 實驗應用代碼
    本章實驗的應用代碼,如下所示:
/* START_TASK任務配置* 包括: 任務句柄 任務優先級 堆棧大小 創建任務*/
#define START_TASK_PRIO 1               /* 任務優先級 */
#define START_STK_SIZE  128             /* 任務堆棧大小 */
TaskHandle_t StartTask_Handler;         /* 任務句柄 */
void start_task(void *pvParameters);    /* 任務函數 *//* LED0任務配置* 包括: 任務句柄 任務優先級 堆棧大小 創建任務*/
#define LED0_PRIO      2                /* 任務優先級 */
#define LED0_STK_SIZE  128              /* 任務堆棧大小 */
TaskHandle_t LED0Task_Handler;          /* 任務句柄 */
void led0_task(void *pvParameters);     /* 任務函數 *//* LED1任務配置* 包括: 任務句柄 任務優先級 堆棧大小 創建任務*/
#define LED1_PRIO      2                				/* 任務優先級 */
#define LED1_STK_SIZE  128              				/* 任務堆棧大小 */
TaskHandle_t LED1Task_Handler;          				/* 任務句柄 */
void led1_task(void *pvParameters);     				/* 任務函數 */int main(void)
{NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4);  	/* 設置中斷優先級分組為組4 */sys_apm32_clock_init(15);                         	/* 配置系統時鐘 */delay_init(120);                                  	/* 初始化延時功能 */usart_init(115200);                               	/* 初始化串口 */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();
}

從上面的代碼中可以看出,在完成必要的初始化后,便創建了“start_task”任務,隨后便開始了任務調度,“start_task”任務的入口函數為函數start_task(),如下所示:

/*** @brief       start_task* @param       pvParameters: 傳入參數(未用到)* @retval      無*/
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_PRIO,(TaskHandle_t*  )&LED0Task_Handler);/* 創建LED1任務 */xTaskCreate((TaskFunction_t )led1_task,(const char*    )"led1_task",(uint16_t       )LED1_STK_SIZE,(void*          )NULL,(UBaseType_t    )LED1_PRIO,(TaskHandle_t*  )&LED1Task_Handler);vTaskDelete(StartTask_Handler); /* 刪除開始任務 */taskEXIT_CRITICAL();            /* 退出臨界區 */
}
從上面的代碼中可以看出,“start_task”任務主要用于創建“led0_task”和“led1_task”任務,這兩個任務的入口函數,如下所示:
/*** @brief       LED0任務* @param       pvParameters: 傳入參數(未用到)* @retval      無*/
void led0_task(void *pvParameters)
{while(1){LED0(0);vTaskDelay(80);LED0(1);vTaskDelay(920);}
}/*** @brief       LED1任務* @param       pvParameters: 傳入參數(未用到)* @retval      無*/
void led1_task(void *pvParameters)
{while(1){LED1(0);vTaskDelay(300);LED1(1);vTaskDelay(300);}
}

可以看到,兩個任務分別控制開發板板載的兩個LED閃爍,但其閃爍的頻率和亮滅時間都不相同,因此因該能看到開發板板載的兩個LED以不同的頻率和不同的亮滅時間進行閃爍。
55.3 下載驗證
在完成編譯和燒錄操作后,可以看到開發板板載的兩個LED以不用的頻率和不同的亮滅時間閃爍著,其中LED0在一個閃爍周期內的亮滅時間約分別為80毫秒和920毫秒,LED1在一個閃爍周期內的亮滅時間約分別為300毫秒和300毫秒。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697653.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697653.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用Python制定旅行計劃

編寫一個Python腳本,用于制定旅行計劃。這個腳本將詢問關于旅行的基本問題,并根據回答生成一旅行計劃。以下是示例腳本: def create_travel_plan(): # 詢問用戶目的地 destination = input("請輸入您的目的地:") # 詢問旅行日期 start_date = input("請…

【Kuiperinfer】筆記02 GoogleTest入門

文章目錄 Google Test基本概念 編寫測試頭文件AssertionTESTTest FixtureInvoking the Tests編寫main()函數 參考 Google Test Google Test是用于編寫C測試的框架,支持多種類型的測試,而不是只有單元測試(unit test)。 編寫測試…

weblogic8版本修改控制臺密碼

weblogic的8.1老版本在控制臺界面上沒有修改密碼的按鈕選項,因此需要通過修改服務器配置文件來更新密碼。 步驟1: 備份域目錄下的DefaultAuthenticatorInit.ldift文件 通過find /域目錄 -name weblogic.jar 查到jar包,通過命令生成文件 …

css3的var()函數

css3的var()函數 變量要以兩個連字符--(橫桿)(減號)為開頭 變量可以在:root{}中定義, :root可以在css中創建全局樣式變量。通過 :root本身寫的樣式,相當于 html,但優先級比后者高。 在CSS3中,var()函數是一個用于插入CSS自定義屬性&#xff…

Vulhub 靶場訓練 DC-6解析

一、搭建環境 kali充當攻擊機 ip地址是:192.168.200.14 DC-6充當靶機 : IP地址暫時未知 注意:讓兩臺機器的使用同一種網絡適配器 二、信息收集 1、探索同網段存活的主機 ①第一種方法 arp-scan -l②第二種方法 netdiscover -i eth0 -…

Python內置函數67個語法、參數和用法詳解

要獲取Python解釋器中所有當前可用的內置函數和變量的完整列表,您可以在Python解釋器中使用dir(__builtins__)命令。這將返回一個包含所有內置函數、異常和其他內置對象的列表。 分為10類 數學運算(7): abs 絕對值divmod 商和余數max 最大min最小pow 指數冪round 取整sum 求…

npm/nodejs安裝、切換源

前言 發現自己電腦上沒有npm也沒有node很震驚,難道我沒寫過代碼么?不扯了,進入正題哈哈…… 安裝 一般沒有npm的話會報錯: 無法將“npm”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱而且報這個錯,我們執行…

【騎行新紀元】社交風暴來襲,你準備加入騎友圈了嗎?

當你的自行車輪輕輕滑過清晨的露水,你是否曾想與志同道合的騎友分享這一刻的喜悅?騎行,這個曾經只是簡單運動的代名詞,如今正在悄然轉變。隨著科技的進步和社交平臺的發展,騎行不再只是一種健身方式,它還帶…

【機器學習】是什么?——講解

機器學習 機器學習是人工智能(AI)的一個子領域,它提供了系統通過數據學習并改進其性能的能力,而不需要人為進行顯式編程,機器學習模型利用大量的數據樣本(訓練數據)來學習如何識別模式和關系&a…

C-指針-010

1指針 1.1語法: 【基類型*指針變量名】 【int *p&a】1.2語義: 【基類型】:指針變量指向的目標的數據類型 【*】:表示此時定義的變量是一個指針類型的變量 【&a】:一塊存放著int類型數據的空間的地址 【*p】…

slot全局屬性 <slot>標簽</slot> ::slotted()偽元素 筆記240223

slot全局屬性 標簽 ::slotted()偽元素 MDN HTML全局屬性 MDN HTML全局屬性 slot MDN HTML <slot>標簽元素 MDN CSS ::slotted()為元素 MDN 使用 templates and slots <slot>標簽 <slot>標簽是的 display 是 contents 在Web開發中&#xff0c;<s…

【高德地圖】Android搭建3D高德地圖詳細教

&#x1f4d6;Android搭建3D高德地圖詳細教程 &#x1f4d6;第1章 高德地圖介紹?了解高德地圖?2D地圖與3D地圖 &#x1f4d6;第2章 搭建3D地圖并顯示?第 1 步&#xff1a;創建 Android 項目?第 2 步&#xff1a;獲取高德Key?第 3 步&#xff1a;下載地圖SDK?第 4 步&…

照片上多余的人怎么處理?這幾種方法讓你的照片更完美!

照片怎么去掉多余人像&#xff1f;這是許多攝影愛好者經常遇到的問題。有時候&#xff0c;我們拍攝了一張非常美好的照片&#xff0c;但由于某些原因&#xff0c;照片中出現了不希望出現的人物。這時候&#xff0c;我們該如何處理呢&#xff1f;下面&#xff0c;我將分享幾種常…

2.5網安學習第二階段第五周回顧(個人學習記錄使用)

本周重點 ①多進程和多線程 1、進程和線程 2、多線程爆破 ②Redis數據庫 1、Redis的使用 2、Redis持久化 3、Redis未授權免密登錄 ③嗅探和Python攻擊腳本 1、嗅探&#xff08;端口掃描和IP掃描&#xff09; 2、SCAPY的應用 3、Python攻擊腳本&#xff08;SYN半連接…

【More Effective C++】條款22:采用op+=取代op+優勢

采用operator實現operator優點&#xff1a; 降低維護成本&#xff0c;只需要維護operator即可&#xff1b;如果operator為publicoperator不需要稱為class的友元&#xff1b;通過模板的方式自動實現operator版本&#xff1b;提供兩種操作方式&#xff0c;operator效率高&#x…

計算機網絡-局域網

文章目錄 局域網局域網拓撲結構以太網以太網傳輸介質以太網時隙提高傳統以太網帶寬的途徑以太網幀格式 局域網協議IEEE 802參考模型IEEE802.2協議LLC幀格式及其控制字段LLC提供的三種服務 IEEE 802.3協議IEEE 802.4協議IEEE 802.5協議 高速局域網100M以太網千兆以太網萬兆以太網…

沖突管理最佳實踐

任何團隊都無法避免沖突&#xff0c;如何有效管理沖突&#xff0c;將沖突轉化為團隊成長和凝聚的動力&#xff0c;是任何一個團隊管理者的必修課。原文: Best Practices for Managing Conflict in Engineering Management Obie Fernandez Unsplash 沖突在任何組織中都不可避免&…

計算機網絡中的與或非運算

三種基本邏輯運算關系 搭建中小公司網絡&#xff0c;根據網址計算&#xff0c;用戶的人數 需要ip和掩碼&#xff0c;確定可分配的ip數 與運算電路為串聯電路&#xff0c;的&#xff0c;A,B的組合情況 具體參考三種基本邏輯運算關系

圖片參考網站

攝圖網-正版高清圖片免費下載_商用設計素材圖庫 (699pic.com) AIGC數字藝術素材圖片-數字藝術-數字藝術圖片-攝圖網 (699pic.com) 花瓣網 - 陪你做生活的設計師&#xff08;創意靈感天堂&#xff0c;搜索、發現設計靈感、設計素材&#xff09; (huaban.com) 千圖網-免費在線…

python視頻流處理工具

在當今數字化的時代&#xff0c;視頻處理應用變得越來越普遍。無論是視頻流分析、實時視頻處理還是視頻流轉碼&#xff0c;都需要強大的工具來實現。Python Vidgear 庫就是這樣一個工具&#xff0c;它為開發人員提供了豐富的功能&#xff0c;用于處理實時視頻流。本文將深入探討…