[FreeRTOS入門] 1.CubeMX中FreeRTOS配置參數及理解

来源:https://www.cnblogs.com/greenlight-xj/archive/2018/09/21/9683320.html
-Advertisement-
Play Games

1.有關優先順序 1.1 Configuration --> FreeRTOS MAX_PRIORITIES 設置任務優先順序的數量:配置應用程式有效的優先順序數目。任何數量的任務都可以共用一個優先順序,使用協程可以單獨的給與它們優先權。見MAX_CO_ROUTINE_PRIORITIES。 在RTOS內核 ...


1.有關優先順序

  1.1 Configuration --> FreeRTOS

 

MAX_PRIORITIES

  設置任務優先順序的數量:配置應用程式有效的優先順序數目。任何數量的任務都可以共用一個優先順序,使用協程可以單獨的給與它們優先權。見MAX_CO_ROUTINE_PRIORITIES。 在RTOS內核中,每個有效優先順序都會消耗一定量的RAM,因此這個值不要超過你的應用實際需要的優先順序數目。

  每一個任務都會被分配一個優先順序,優先順序值從0~ (MAX_PRIORITIES - 1)之間。低優先順序數表示低優先順序任務。空閑任務的優先順序為0(PriorityIdle),因此它是最低優先順序任務。

  FreeRTOS調度器將確保處於就緒狀態(Ready)或運行狀態(Running)的高優先順序任務比同樣處於就緒狀態的低優先順序任務優先獲取處理器時間。換句話說,處於運行狀態的任務永遠是高優先順序任務。

  處於就緒狀態的相同優先順序任務使用時間片調度機制共用處理器時間。

Interrupt nesting behaviour configuration

斷言配置

LIBRARY_LOWEST_INTERRUPT_PRIORITY

 

此巨集定義是用來配置 FreeRTOS中用到的SysTick中斷和PendSV中斷的優先順序reeRTOSreeRTOS reeRTOSreeRTOS 用到 的 SysTSysT ick 中斷和 PendSV 中斷 的優先順序。在 NVIC分組設置為4的情況下,此巨集定義的範圍就是 0-15 ,即專門配置搶占優先順序。這裡 即專門配置搶占優先順序。這裡 配置 為了 15,即 SysTick和 PendSV 都配配置為了最低優先順序,實際項目中也建議配置為最低優先順序。

LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY

定義了受FreeRTOS管理的最高優先順序中斷。簡單的說就是允許用戶在這個中斷服務程式裡面調用FreeRTOS的API的最高優先順序。設置NVIC的優先順序分組為4的情況下(全部配置為搶占式優先順序。又因為STM32的優先順序設置僅使用CM內核8bit中的高4bit,即只能區分2^4 = 16種優先順序。因此當優先順序分組設置為4的時候可供用戶選擇搶占式優先順序為0到15,共16個優先順序,配置為0表示最高優先順序,配置為15表示最低優先順序,不存在子優先順序。),配置LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY可以在搶占式優先順序為1到15的中斷裡面調用FreeRTOS的API函數,搶占式優先順序為0的中斷裡面是不允許調用的。

Eg:configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 為 0x01 表示用戶可以在搶占式優先順序為 1 到 15 的中斷裡面調用 FreeRTOS 的 API 函數,搶占式優先順序為 0 的中斷裡面是不允許調用的。即搶占式優先順序為 1 到 15的中斷,均受FreeRTOS管理,0是最高優先順序不受FreeRTOS管理。        

Parameter Description:
The highest interrupt priority that can be used by any interrupt service routine that makes calls to interrupt safe FreeRTOS API functions.
DO NOT CALL INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER PRIORITY THAN THIS! (higher priorities are lower numeric values).

 

  1.2 Task and Queues

Priority:任務優先順序。STM32Cube對FreeRTOS進行了一些修改,優先順序只有7個,優先順序從低到高依次是:osPriorityIdle(空閑任務/任務優先順序為0)、osPriorityLow、osPriorityBelowNormal、osPriorityNormal、osPriorityAboveNormal、osPriorityHigh、osPriorityRealtime; 

2.有關時鐘配置

  2.1兩個時基

 

轉資料2:[FreeRTOS]請教大家關於新版本CubeMX生成FreeRTOS時選擇時基的問題   http://bbs.armfly.com/read.php?tid=18289&page=e

我也使用生成的代碼,這個問題我估摸著是這樣的。
第一  FreeRTOS 肯定使用的是 systick 

第二  提到的 recommended to use a timebase other 應該說的HAL_IncTick() 還是需要用到的;由於FreeRTOS使用了systick ,所以推薦使用其他的時基源來IncTick


至於為什還要HAL_IncTick()??  原來在這裡

這個是 HAL_CAN_Transmit() 其中的一段。。 。 

 問題:

1.當時,

 

2當時,(無論LIBRARY_LOWEST_INTERRUPT_PRIORITY和LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY怎麼設置都如下)

轉:systick中斷優先順序為15,是否會導致延時不准確?http://www.openedv.com/forum.php?mod=viewthread&tid=269893

我覺得是的,比如串口的中斷搶占優先順序設成6(優先順序分組是4),那麼串口中斷服務函數里的處理就要乾凈利索,所謂快進快出,否則耽誤systick的延時處理。 但是應用任務無論優先順序多少,都不會對Systick的處理造成影響。

總結,HAL庫函數如CAN通訊用的是HAL_IncTick(),而HAL_IncTick()是CubeMX的TimeBase配置的,這個時候如果需要實時響應,則TimeBase最好為最高優先順序0,即根據CubeMX推薦的設置TimeBase為TIM1提供。而原先裸機的HAL系統時鐘用的Systick,現在Systick用到FreeRTOS上的調度,所以要求Systick為最低優先順序15,這樣可以保證systick不會對進程造成影響,僅存在延時。而消除延時的手段並不是提高systick的優先順序,而是讓中斷服務程式更快。

 

 

轉載:資料

1.FreeRTOS操作系統配置參數說明 . 金濤 https://wenku.baidu.com/view/0289379d8ad63186bceb19e8b8f67c1cfad6eef5.html

2.[FreeRTOS]請教大家關於新版本CubeMX生成FreeRTOS時選擇時基的問題 http://bbs.armfly.com/read.php?tid=18289&page=e

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • .NET Framework是學習的最好資源,有意識的研究FCL是每個.NET程式員的必修課,關於介面和抽象類在FCL中的使用,我有以下的建議: ...
  • 以前用Qt和C++Builder的時候,裡面都有一個InputDialog輸入框。但是到C# winform裡面沒有這個。那麼要實現這個效果怎麼辦,當然也是比較容易的。 先看下效果: 點擊顯示輸入框按鈕,彈出輸入框 在書入框內輸入132456,然後按下:確定或者回車鍵,效果如下: 以上就是輸入框的整 ...
  • ubuntu-18.04 設置開機啟動腳本 參閱下列鏈接 https://askubuntu.com/questions/886620/how-can-i-execute-command-on-startup-rc-local-alternative-on-ubuntu-16-10 ubuntu-1 ...
  • 一般的繼承與處理規則 若上層父OU的某個組策略項目被設定,但是其下層子OU未設定該項目,則下層子OU繼承上層父OU的這個組策略項目設定值 若在下層子OU內的某個組策略項目被設定,則此設定值預設會覆蓋由其上層父OU所繼承的組策略項目設定值 組策略設定有累加性,但若站點、域與組織單位的GPO設定有衝突時 ...
  • 在前面十五篇博客中,幾乎每一篇都有介紹Nmap,這裡系統地介紹下每個參數: 註意:區分每個參數的大小寫 -iL:列好的IP放在一個文本裡面,可以直接掃描這個文本 用法:namp -iL <文本名> -iR:隨機掃指定數目的IP: 用法:nmap -iR <IP數量> 示例:我現在隨機掃描50個IP的 ...
  • 防火牆簡單的識別方式: 如圖: 可以簡單明瞭看出:發送SYN不回應,發送ACK回RST可以說明開啟過濾等等 基於這個原理,我們可以寫一個腳本來對防火牆來探測和識別: 這裡的flags==18或者是6或者是4,是TCP中FLAG代表的數字: OK,我們可以試試這個腳本: 如果腳本是從windows移過 ...
  • Hive的命名空間分為:hiveconf , system, env 和 hivevar 1、hiveconf 的命名空間指的是hive-site.xml下麵配置的環境變數 2、system的命名空間是系統的變數,包含JVM的運行信息 3、evn的命名空間是指環境變數,包含Shell環境下的變數信息 ...
  • 一、安裝xrdp工具: # yum install xrdp # yum install tigervnc-server # service xrdp start 以上三個命令執行完畢安裝完成,服務也已經啟動。 二、打開windows遠程視窗 輸入linux主機IP,點擊確定。 即可連接 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...