21.3-啟動流程、編碼風格(了解) 第21章-FreeRTOS項目實戰--基礎知識之新建任務、啟動流程、編碼風格、系統配置 文件組成和編碼風格(了解)

21.3-啟動流程、編碼風格(了解)

啟動流程

第一種啟動流程(我們就使用這個):

在main函數中將硬件初始化、RTOS系統初始化,同時創建所有任務,再啟動RTOS調度器。

第二種啟動流程:

在main函數中將硬件初始化、RTOS系統初始化,只創建一個啟動任務,再啟動RTOS調度器。 之后,在啟動任務中創建各種應用任務,當所有任務創建完成,啟動任務把自己刪除。

文件組成和編碼風格(了解)

0、文件組成

FreeRTOS文件組成

核心文件

  • 包含核心內核功能的實現,是 FreeRTOS 的主要組成部分,通常包括:
    • tasks.c:實現任務管理的核心文件,包含任務創建、調度、刪除等核心功能。
    • queue.c:實現消息隊列,用于任務間的數據通信和同步。
    • list.c:實現內核中的鏈表操作,是任務調度和管理的重要數據結構。
    • timers.c:實現軟件定時器的創建和管理。
    • event_groups.c:實現事件組,用于多任務間的事件控制和同步。
    • croutine.c:協程支持文件(不常用),用于非常小的內存占用需求下實現輕量級的任務。

配置文件

  • 包括用戶根據項目需求調整的配置項:
    • FreeRTOSConfig.h:定義系統行為、資源限制等配置項。用戶可以在這個文件中設置堆大小、任務優先級數量、時間片長度、鉤子函數等。

硬件抽象層 (HAL) 和移植文件

  • 這些文件用來確保 FreeRTOS 能夠在各種硬件架構上運行,主要包括:
    • portable/:不同硬件平臺的移植文件夾,包含各架構的匯編實現、上下文切換、堆管理等文件。
    • port.cportmacro.h:不同架構的特定實現文件,比如 ARM Cortex M 系列、AVR、PIC 等不同芯片的實現。

CMSIS-RTOS 接口文件通常包括:
在這里插入圖片描述
這些文件里的宏定義、數據類型、函數名稱等前綴都是"os"。原理上來說,這些函數和數據類型的名稱與具體的RTOS無關,他們是CMSIS-RTOS標準定義。具體實現,列如前綴"os"的函數調用具體移植的RTOS實現函數,例如,如果移植FreeRTOS,"os"里面的任務創建函數,調用的是FreeRTOS的具體任務創建函數,如果uc/OS-II,"os"函數就調用uc/OS-II的具體任務創建函數。

  1. cmsis_os.h
    • 這是 CMSIS-RTOS API 的頭文件,定義了 CMSIS-RTOS 所需的所有函數接口。它包含了任務管理、定時器、信號量、互斥鎖、消息隊列等操作。通過這些標準接口,應用程序可以不依賴具體的 RTOS 實現。
  2. cmsis_os.c
    • 該文件實現了 CMSIS-RTOS API 中的函數接口,將這些接口與 FreeRTOS 的內核 API 關聯起來。也就是說,通過在這個文件中調用 FreeRTOS 的 API,cmsis_os.c 能夠使得應用程序使用 CMSIS-RTOS API 控制 FreeRTOS。
1、數據類型

FreeRTOS使用的數據類型雖然都是標準C的數據類型,但都進行了重定義,取了個新名字。
在這里插入圖片描述char數據類型可以通過keil指定了有符號或者無符號,默認為無符號。
在這里插入圖片描述

2、變量名!!!(值得學習)

在FreeRTOS中,定義變量時,把變量的類型作為前綴,方便用戶通過變量即可知道變量的類型。

變量名=變量類型簡寫+變量的英文意思

比如

char cTemp;

unsigned char ucTemp

unsigned char* pucTemp

char變量的前綴c、short變量的前綴是s、long變量的前綴是l。

其它比如結構體、任務句柄等是x。

如果是無符號類型的,前綴再加u;

如果是指針變量,前綴再加p,比如"pc" 表示char * 類型

3、函數名

函數名包含了函數返回值的類型、函數所在的文件名以及函數的功能,如果是私有的函數,還會加prv前綴。 這種命名方式方便尋找函數定義并了解函數作用,值得借鑒。

舉例:

xTaskCreate()函數的返回值為任務句柄,在Task.c中定義,作用是創建任務;

vTaskPrioritySet()函數的返回值為void,在Task.c中定義,作用是設置優先級;

CMSIS-RTOS相關文件中定義的函數前綴都是"os",不包括包括返回值類型和所在文件的前綴,例如cmsis_os2.h中的函數osDelay,等

4、宏定義

在FreeRTOS中,宏用大寫字母表示,并配有小寫字母作為前綴, 前綴用于指示該宏在哪個頭文件定義。

舉例:

portMAX_DELAY, 位于portable.h;

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

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

相關文章

【AI非常道】二零二五年一月(二),AI非常道

經常在社區看到一些非常有啟發或者有收獲的話語,但是,往往看過就成為過眼云煙,有時再想去找又找不到。索性,今年開始,看到好的言語,就記錄下來,一月一發布,亦供大家參考。 有關AI非…

Mac Electron 應用簽名(signature)和公證(notarization)

在MacOS 10.14.5之后,如果應用沒有在蘋果官方平臺進行公證notarization(我們可以理解為安裝包需要審核,來判斷是否存在病毒),那么就不能被安裝。當然現在很多人的解決方案都是使用sudo spctl --master-disable,取消驗證模式&#…

1、開始簡單使用rag

文章目錄 前言數據存放申請api開始代碼安裝依賴從文件夾中讀取文檔文檔切塊將分割嵌入并存儲在向量庫中檢索部分代碼構造用戶接口演示提示 整體代碼 前言 本章只是簡單使用rag的一個示例,為了引出以后的學習,將整個rag的流程串起來 數據存放 一個示例…

C 標準庫 - `<errno.h>`

C 標準庫 - <errno.h> 引言 在C語言編程中,正確處理錯誤是保證程序穩定性和可靠性的關鍵。C標準庫中的<errno.h>頭文件提供了錯誤碼定義和宏,使得開發者能夠更好地管理和處理程序運行過程中可能出現的錯誤。本文將詳細介紹<errno.h>頭文件的作用、常用錯…

愛書愛考平臺說明

最近我開發了一個綜合性的考試平臺&#xff0c;內容包括但不限于職業資格證考試、成人教育、國家公務員考試等內容。目前1.0版本已經開發完成&#xff0c;其他的功能陸續完善中。 微信小程序搜索"愛書愛考" 微信小程序圖標如下圖: 目前維護了java相關的面試題的考題…

ZZNUOJ(C/C++)基礎練習1011——1020(詳解版)

目錄 1011 : 圓柱體表面積 C語言版 C版 1012 : 求絕對值 C語言版 C版 1013 : 求兩點間距離 C語言版 C版 1014 : 求三角形的面積 C語言版 C版 1015 : 二次方程的實根 C語言版 C版 1016 : 銀行利率 C語言版 C版 1017 : 表面積和體積 C語言版 C版 代碼邏輯…

Java面試題2025-設計模式

1.說一下開發中需要遵守的設計原則&#xff1f; 設計模式中主要有六大設計原則&#xff0c;簡稱為SOLID &#xff0c;是由于各個原則的首字母簡稱合并的來(兩個L算一個,solid 穩定的)&#xff0c;六大設計原則分別如下&#xff1a; 1、單一職責原則 單一職責原則的定義描述非…

認識小程序的基本組成結構

1.基本組成結構 2.頁面的組成部分 3.json配置文件 4.app.json文件(全局配置文件&#xff09; 5.project.config.json文件 6.sitemap.json文件 7.頁面的.json配置文件 通過window節點可以控制小程序的外觀

git中有關old mode 100644、new mode 10075的問題解決小結

在 Git 版本控制系統中&#xff0c;文件權限變更是一種常見情況。當你看到類似 old mode 100644 和 new mode 100755 的信息時&#xff0c;這通常表示文件的權限發生了變化。本文將詳細解析這種情況&#xff0c;并提供解決方法和注意事項。 問題背景 在 Git 中&#xff0c;文…

20個整流電路及仿真實驗匯總

0、 前言 以下是關于“20個整流電路及仿真實驗匯總”的前言部分: 在現代電力電子技術領域,整流電路作為將交流電(AC)轉換為直流電(DC)的關鍵電路,廣泛應用于各類電源設計、信號處理以及電力電子設備中。整流電路不僅能夠為電子設備提供穩定的直流電源,還在電力傳輸、…

截取窗口的完整矩形不包括陰影區域(含邊框和標題欄)

在Windows編程中&#xff0c;GetWindowRect 函數用于獲取窗口的矩形區域&#xff0c;包括窗口的邊框和標題欄。如果你希望獲取窗口的客戶區&#xff08;不包含窗口邊框、標題欄和陰影區域&#xff09;&#xff0c;可以使用 GetClientRect 函數。 區別 GetWindowRect&#xff1…

第30章 測試驅動開發中的設計模式解析(Python 版)

寫在前面 這本書是我們老板推薦過的&#xff0c;我在《價值心法》的推薦書單里也看到了它。用了一段時間 Cursor 軟件后&#xff0c;我突然思考&#xff0c;對于測試開發工程師來說&#xff0c;什么才更有價值呢&#xff1f;如何讓 AI 工具更好地輔助自己寫代碼&#xff0c;或許…

2025美賽復盤總結反思(論文手)

充實的經歷&收獲 美賽這個過程&#xff0c;確實逼著自己學了不少東西&#xff0c;excel本身&#xff0c;以及發現Ai確實能幫忙處理不少的了&#xff0c;也第一次發現原來自己熬通宵也能很精神&#xff08;當然確實是傷身體的&#xff09; 好的經驗&#xff1a; 積極搜索…

從0開始使用面對對象C語言搭建一個基于OLED的圖形顯示框架(協議層封裝)

目錄 協議層設計&#xff0c;以IIC為例子 關于軟硬件IIC 設計的一些原則 完成協議層的抽象 刨析我們的原理 如何完成我們的抽象 插入幾個C語言小技巧 完成軟件IIC通信 開始我們的IIC通信 結束我們的IIC通信 發送一個字節 &#xff08;重要&#xff09;完成命令傳遞和…

舉例說明python單利模式的必要性

單例模式的核心目的是確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來獲取這個實例。這種設計模式在某些場景下非常必要&#xff0c;尤其是在需要嚴格控制資源訪問、共享狀態或配置管理的場景中。下面通過幾個具體的例子來說明Python中單例模式的必要性。 1. 數據庫…

【騰訊云】騰訊云docker搭建單機hadoop

這里寫目錄標題 下載jdk hadoop修改hadoop配置編寫Dockerfile構建鏡像運行鏡像創建客戶端 下載jdk hadoop wget --no-check-certificate https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz wget --no-check-certificate https://repo.huaweicloud.…

設計模式 - 行為模式_Template Method Pattern模板方法模式在數據處理中的應用

文章目錄 概述1. 核心思想2. 結構3. 示例代碼4. 優點5. 缺點6. 適用場景7. 案例&#xff1a;模板方法模式在數據處理中的應用案例背景UML搭建抽象基類 - 數據處理的 “總指揮”子類定制 - 適配不同供應商供應商 A 的數據處理器供應商 B 的數據處理器 在業務代碼中整合運用 8. 總…

HTML5+SVG+CSS3實現雪中點亮的圣誕樹動畫效果源碼

源碼介紹 這是一款基于HTML5SVGCSS3實現雪中點亮的圣誕樹動畫效果源碼。畫面中的圣誕樹矗立在雪地中&#xff0c;天上飄落著雪花。當鼠標滑過圣誕樹時&#xff0c;可見到圣誕樹上的燈光閃爍&#xff0c;同時左下角探出雪怪模樣的半個腦袋&#xff0c;四處張望著。整體畫面栩栩…

C基礎寒假練習(3)

一、求數組中的第二大值 #include <stdio.h> int main() {int arr[] {12, 35, 1, 10, 34, 1};int size sizeof(arr) / sizeof(arr[0]);if (size < 2) {printf("數組元素不足兩個\n");return 0;}int first -2147483648, second -2147483648; // 使用IN…

【linux三劍客】grep練習題

題目 進入/lianxi目錄&#xff0c;復制/etc/passwd到當前目錄下&#xff0c;然后對passwd進行操作查找出當前passwd文件中以ftp或者mail開頭的行&#xff0c;在屏幕上輸出。查找出當前passwd文件中有沒有以r、m、f開頭的行&#xff0c;在屏幕上輸出。查找出當前passwd文件中以…