freeRTOS移植實驗

提示:文章

文章目錄

  • 前言
  • 一、背景
    • 第6章節
  • 二、
    • 2.1
    • 2.2
  • 三、
    • 3.1
  • 總結

前言

前期疑問:
本文目標:


一、背景

在家里先使用野火網盤資料里的freeRTOS源碼,網盤里是v9.0.0。

J:\野火\STM32F103ZET6_霸道開發板\A盤(資料盤)\1-程序源碼_教程文檔\3-[野火]《FreeRTOS內核實現與應用開發實戰指南》\2-FreeRTOS源碼及官方參考資料\ebf_freertos_data_20211225\FreeRTOSv9.0.0\FreeRTOSv9.0.0\FreeRTOS在這里插入圖片描述
新建工程在這里插入圖片描述
1、在這里插入圖片描述本地創建文件夾
2、在這里插入圖片描述創建工程后選擇芯片
3、在這里插入圖片描述點擊OK,關閉Manage Run-Time Environment 選項框之后,剛剛我們選擇的CORE 和Startup 這兩個文件就會添加到我們的工程組里面
4、在這里插入圖片描述新建組并重命名并且在user文件夾和Doc文件夾中添加文件
5、在這里插入圖片描述按照教程main文件中新建demo代碼,編譯成功
6、在這里插入圖片描述根據system文件中的時鐘頻率更改工程的頻率,改成25M。還聯想到protues仿真時頻率設置成72M會亂碼,是不是這個原因呢?看了USART代碼,syste文件中設置的宏也不是36M,而是24M或者72M

第6章節

看野火freeRTOS的資料,看到第7章 任務的定義與任務切換的實現——7.6 main 函數章節,教程寫了初版最簡單的多線程demo,然后想自己也照著實現工程,然后回到第3章 初識FreeRTOS——3.3 FreeRTOS 資料獲取,準備通過鏈接(https://sourceforge.net/projects/freertos/files/FreeRTOS/)下載freeRTOS源碼,但是不確定下載哪個版本,本來想下載最新版本,想了下下載BDM同版本的吧。
看BDM100的代碼源碼,查看下述文件:
[圖片]

確定是V10.2.1,所以下載對應版本。

第6 章節
這個章節在前面新建的本地工程基礎上,在freertos文件夾下新建一個include文件夾,里面放list.h文件,同時freertos文件夾新建一個list.c文件。將兩個文件添加到freeRTOS/Source組中,其中list.h文件還需要在頭文件中設置。
我直接從野火現有工程中拷貝文件。進入freertos文件夾下,看到除了list文件還有其他很多文件,主要是include文件夾中有不少其他文件。
[圖片]

處理方法是只拷貝list文件,下面設置頭文件路徑。
[圖片]

添加后編譯正常。
下面將野火工程中main文件代碼拷貝到keil,中文會亂碼,設置keil以下兩個項目:
[圖片]

設置好后重新拷貝,中文不亂碼。
重新編譯后報錯
[圖片]

拷貝FreeRTOS.h文件到include文件夾下,編譯,報錯如下
[圖片]

按照錯誤再繼續添加文件,
FreeRTOSConfig.h
portable.h
添加文件后報錯
[圖片]

繼續添加這個文件portmacro.h,編譯通過
keil警告:
[圖片]

查了下是因為版本授權過期。
報這個警告
[圖片]

遇到“no previous extern declaration for non-static variable”錯誤通常意味著在代碼中使用了某個變量,但是在使用它之前沒有正確地聲明或者定義該變量。
嘗試將頭文件全部添加到freertos組中,該告警繼續存在。忽略,仿真調試,在for語句處打斷點,將List_Item、List_Item1、List_Item2、List_Item3添加到watch窗口,全速運行查看實驗結果:
[圖片]

可以看到四個變量中存儲的前后節點情況。
所以這個章節應該就是嘗試寫了個關于freertos常用的鏈表的demo程序,為什么freertos常用鏈表呢。據我了解,任務有四個狀態:就緒態,運行態,阻塞態,()。其中就緒態,任務處于就緒態的時候,就是將任務放在就緒列表中。就緒列表就是一個鏈表,里面存了很多任務。
繼續往下看。

第7章
按照第7章教程,將第7章工程main文件代碼拷貝到自己的工程main文件中,編譯報錯,
[圖片]

拷貝task.h和task.c文件。
第7章用到了程序塊,按照教程在FreeRTOS.h文件中增加skTCB結構體定義。
FreeRTOS.h文件差異如下
[圖片]

拷貝后configMAX_TASK_NAME_LEN宏定義報錯,查看FreeRTOSConfig.h文件差異如下
[圖片]

編譯報錯缺少文件,拷貝文件
[圖片]

該文件中內容如下:
[圖片]

拷貝文件后編譯。
編譯報錯,根據錯誤搜索,發現portable.h文件也有差異如下
[圖片]

最終指向涉及到這個文件,這個文件是第7章新增的文件,路徑如下圖所示
[圖片]

添加文件后編譯,port.c文件報錯很多錯誤。如下圖所示
[圖片]

這個問題比較奇怪,之前沒有遇到過,最后查了資料,看到下面這篇文章得到答案:Keil5.37版本下,使用ARMcomplier6編譯__asm 函數報錯的問題,解決辦法如下圖
[圖片]

切換成下面的版本。編譯之前的報錯消失了,僅剩下面的一個錯誤。
在這里插入圖片描述

根據這個錯誤定位到portmacro.h文件有差異。修改后編譯通過。
嘗試虛擬調試,將flag1和flag2加入analysis,運行出現預期效果
在這里插入圖片描述

二、

2.1

2.2

三、

3.1


總結

未完待續

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

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

相關文章

食品加工溫控場景:PROFIBUS轉MODBUS的溫控表連接規范

在現代的工業自動化領域里,實現不同通信協議設備間無縫對接的技術日益受到重視。這不僅關乎系統整合性和效率的提升,更是實現復雜工業過程自動化的必經之路。特別是在眾多的通信協議中,MODBUS和PROFIBUS這兩種廣泛使用的協議因其各自的優勢而…

【動態規劃】回文串(二)

📝前言說明: 本專欄主要記錄本人的動態規劃算法學習以及LeetCode刷題記錄,按專題劃分每題主要記錄:(1)本人解法 本人屎山代碼;(2)優質解法 優質代碼;&…

Ubuntu22.04.5 桌面版然后安裝 VMware 17

安裝 VMware 需要 GCC 12版本 標題通過 PPA 安裝 這是最簡單的方法,適用于大多數 Ubuntu 版本。 步驟 1:添加 PPA 倉庫 sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt…

深入解析 MySQL 架構:從基礎到高級

MySQL 是一款廣泛使用的開源關系型數據庫管理系統,以其高性能、可靠性和靈活性而聞名。無論是小型創業公司還是大型企業,MySQL 都是許多應用程序的首選數據庫解決方案。本文將深入探討 MySQL 的架構設計,幫助讀者更好地理解其內部工作機制&am…

BACnet協議移植適配實現BACnet/IP和BACnet MSTP相關功能

1、從GitHub或者其他網站下載最新的協議棧源碼 源碼結構如圖所示: 其中src是協議棧源碼,可直接拿來使用,apps里面是一些功能的應用示例,有BACnet IP,BACnet MSTP,BACnet Router等功能。 2、協議棧移植完成…

Ubuntu 22.04.1 LTS 離線安裝Docker(最快方法,僅需一個壓縮文件和兩個腳本)

作者親測:親測有效無bug。 利用ubuntu22.04下載完docker-27.4.1.tgz,然后按照下面方法安裝。選擇sudo方法。 tips:這個ubuntu22.04是遷移后的服務器的版本,不是遷移前的版本。 下載 下載地址 : https://download.docker.com/linux/static/stable/x86_…

Tkinter --按鈕點擊事件應用場景

第二章 事件處理 目錄 第二章 事件處理 四、事件處理 4.1 按鈕點擊事件 4.1.1信息展示類場景 1. 靜態文本說明 ?編輯 2. 動態狀態顯示 4.1.2.界面美化與裝飾 1. 圖像 / 圖標展示 ?編輯 2. 分隔與布局輔助 4.1.3 交互反饋與提示 1. 操作結果提示 2. 幫助與說明文本…

計算機網絡學習筆記:TCP流控、擁塞控制

文章目錄 前言一、TCP流量控制1.1、案例:三次流量控制1.2、持續計時器 二、TCP擁塞控制2.1、擁塞控制的指標2.2、慢開始算法和擁塞避免算法2.3、快重傳算法和快恢復算法2.4、練習 三、TCP擁塞控制與網際層擁塞控制總結 前言 TCP協議中的流量和擁塞,是兩個…

【Linux】Tomcat搭建

前言 Tomcat Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。 JSP JSP是一種跨平臺的動態網頁技術標準,可以…

Ajax 核心知識點全面總結

文章目錄 Ajax 核心知識點全面總結一、Ajax 基礎概念1、定義2、核心特點 二、Ajax 工作原理與核心組件1、工作流程2、XMLHttpRequest(XHR)對象 三、Ajax 請求方法與參數1、常見請求方法2、請求參數處理 四、Ajax 異步與錯誤處理1、異步處理2、錯誤處理 五…

SpinFlowSim:用于癌癥組織學信息驅動的擴散MRI微血管映射的血流模擬框架|文獻速遞-深度學習醫療AI最新文獻

Title 題目 SpinFlowSim: A blood flow simulation framework for histology-informeddiffusion MRI microvasculature mapping in cancer SpinFlowSim:用于癌癥組織學信息驅動的擴散MRI微血管映射的血流模擬框架 01 文獻速遞介紹 在擴散磁共振成像&#xff08…

量化面試綠皮書:21. 拋硬幣游戲

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。 21. 拋硬幣游戲 兩個賭徒正在玩一個拋硬幣游戲。 賭徒A有(n1)枚均勻硬幣,賭徒B有n枚均勻硬幣。 Q: 如果兩人同時拋擲所有硬幣&a…

OpenLayers 框架體系

注:當前使用的是 ol 9.2.4 版本,天地圖使用的key請到天地圖官網申請,并替換為自己的key OpenLayers框架組織結構龐大,只通過官網API進行查看,對框架結構缺少一個整體、全面的看法。借助樹形結構圖或思維導圖&#xff0…

緩存系統-基本概述

目錄 一、系統概述 二、名詞解釋 三、淘汰策略 1、LRU 2、LFU 3、FIFO 4、TTL 5、Random 四、讀寫模式 1、Cache Aside(旁路緩存) 2、Write Through(直寫) 3、Write Back(回寫) 五、問題方案 …

基于GNU Radio Companion搭建的BPSK收發通信實驗

目錄 一、實驗目的和要求 二、實驗內容 1.Lab5 仿真設計一個BPSK的數字收發射系統 Lab6 實際使用RTLSDR解調BPSK信號 一、實驗目的和要求 1.了解軟FM的工作方式和原理,數字通信的碼間串擾及星座圖 2.掌握并正確使用RTL-SDL硬件和Gnuradio軟件 3.正確使用Gnraduo軟件,建…

華為OD機試-返回矩陣中非1的元素、個數/數值同化-BFS(JAVA 2025B卷)

import java.util.*;/*** author 308413* version Ver 1.0* date 2025/6/18* description 返回矩陣中非1的元素*/ public class Non1ElementInMatrix {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int N scanner.nextInt();int M scan…

Redis學習筆記——黑馬點評 消息隊列25-30

前言: 學習收獲: Redis消息隊列: 消息隊列(Message Queue),字面意思就是存放消息的隊列。最簡單的消息隊列包括3個角色: 消息隊列:存儲和管理消息,也被稱為消息代理生…

基于Django+Vue3的草莓病害檢測系統設計與實現,Web前后端分離,YOLOv8 Web目標檢測系統

這里寫自定義目錄標題 基于DjangoVue3的草莓病害檢測系統 基于DjangoVue3的草莓病害檢測系統 本項目結合 YOLOv8 與 Django Vue3 ,構建了一個通用的 Web 前后端系統,便于用戶進行目標檢測的操作和展示,實現對圖片、視頻實時目標檢測和攝像頭…

【MFC】樹控件的使用詳解

目錄 添加線條鏈接 添加折疊小按鈕 設置樹控件的節點和對應的圖標 設置默認選中項 設置選中項切換響應函數 涉及接口介紹: 首先我們通過資源視圖可以添加一個樹形控件,如下: 添加線條鏈接 在樹形控件中,有一個屬性“Has…

跨境賣家警報。抽繩背包版權案立案,TRO在即速排查

近日Shenzhenshi Jingyida Trading Co., LTD委托律所Dewitty And Associates, Chtd.對其熱銷的抽繩設計多功能運動背包發起跨境版權維權,保護范圍涵蓋產品外觀設計。 案件基本情況: 起訴時間:2025-6-12 案件號:25-cv-06509 原…