(學習日記)2024.03.01:UCOSIII第三節 + 函數指針 (持續更新文件結構)

寫在前面:
由于時間的不足與學習的碎片化,寫博客變得有些奢侈。
但是對于記錄學習(忘了以后能快速復習)的渴望一天天變得強烈。
既然如此
不如以天為單位,以時間為順序,僅僅將博客當做一個知識學習的目錄,記錄筆者認為最通俗、最有幫助的資料,并盡量總結幾句話指明本質,以便于日后搜索起來更加容易。


標題的結構如下:“類型”:“知識點”——“簡短的解釋”
部分內容由于保密協議無法上傳。


點擊此處進入學習日記的總目錄

2024.03.01

  • 七、UCOSIII:文件結構與解釋
  • 八、UCOSIII:函數指針
    • 函數指針的形式
      • 1. 形式1:返回類型(*函數名)(參數表)
      • 2. 形式2:typedef 返回類型(*新類型)(參數表)

七、UCOSIII:文件結構與解釋

由于后面會用到各種宏與函數,為了給它們分類,我提前把UCOSIII系統各文件的功能整理出來,后面遇到各種文件就知道什么功能了。
在這里插入圖片描述

父文件目錄子文件目錄孫文件目錄文件名功能
UseruCOS-IIISourceos.h包含主要的μC/ OS-III頭文件,該文件聲明常量,宏,μC/ OS-III全局變量(僅供μC/ OS-III使用),函數原型等。
--Sourceos_type.h包含μC/ OS-III數據類型的聲明,端口設計人員可以更改這些聲明以更好地利用CPU體系結構。
與OS相關的數據類型則在os_type.h定義。
在這種情況下,通常會將文件復制到端口目錄,然后進行修改。
--Sourceos_var.c包含μC/ OS-III全局變量。 這些變量供μC/ OS-III管理,不應由應用程序代碼訪問。
--Sourceos_task.c包含用于使用OSTaskCreate(),OSTaskDel(),OSTaskChangePrio()等管理任務的代碼。
與任務的操作密切相關,包括任務的建立、刪除、掛起、恢復等等。
--Sourceos_time.cuC/OS-II中最小時鐘單位是timetick(時鐘節拍),其中包含時間延遲、時鐘設置及時鐘恢復等與時鐘相關的函數。
--Sourceos_cfg.h定義優先級數量
--Sourceos_cfg_app.c根據os_cfg_app.h中的值聲明變量和數組。
--Sourceos_core.c操作系統的處理核心。包括操作系統初始化、操作系統運行、中斷進出的前導、時鐘節拍、任務調度、事件處理等多部分。能夠維持系統基本工作的部分都在這里
--Sourceos_dbg.c包含由內核感知的調試器或μC/ Probe使用的常量變量的聲明。
--Sourceos_flag.c包含事件標志管理的代碼。
--Sourceos_int.c包含用于中斷處理程序任務的代碼,當OS_CFG_ISR_POST_DEFERRED_EN(請參見os_cfg.h)設置為1時使用。
--Sourceos_mem.c包含μC/ OS-III固定大小內存管理器的代碼。
--Sourceos_msg.c包含處理消息的代碼。μC/OS-III提供消息隊列和任務特定的消息隊列。
--Sourceos_mutex.c包含用于管理互斥信號量的代碼。
--Sourceos_pend_multi.c包含允許代碼插入多個信號量或消息隊列的代碼。
--Sourceos_prio.c包含用于管理位圖表的代碼,用于跟蹤準備就緒的任務。如果使用的CPU提供了位設置,清除和測試指令以及計數前導零指令,則可以用等效于匯編語言的該文件代替該匯編語言以提高性能。
--Sourceos_q.c管理信號量。
--Sourceos_sem.c包含用于管理用于資源管理和/或同步的信號量的代碼。
--Sourceos_stat.c包含用于統計任務的代碼,該代碼用于計算全局CPU使用率和每個任務的CPU使用率。
--Sourceos_tick.c包含用于管理已延遲自身的任務或因超時而在內核對象上暫掛的任務的代碼。
--Sourceos_tmr.c包含用于管理軟件計時器的代碼。
UseruCOS-IIIPortsos_cpu.h進行數據類型定義,處理器相關代碼和幾個函數原型。
--Portsos_cpu_c.c定義一些用戶 hook 函數。
--Portsos_cpu_a.asm移植需要用匯編代碼完成的函數,主要就是任務切換函數。
--Portsos_dbg.c內核調試相關數據和函數,可以不改
UseruC-CPUcpu.h凡是與CPU類型相關的數據類型則統一在cpu.h中定義,包含用于使μC/OS-III和其他模塊獨立于CPU和編譯器字長的類型定義。
具體來說,將找到CPU_INT16U,CPU_INT32U,CPU_FP32和許多其他數據類型的聲明。
該文件還指定CPU是大端機還是小端機,定義μC/ OS-III使用的CPU_STK數據類型,定義宏CPU_CRITICAL_ENTER()和CPU_CRITICAL_EXIT(),并包含特定于CPU體系結構的函數的函數原型等。
-uC-CPUcpu_core.c包含所有CPU體系結構通用的C代碼。 具體來說,該文件包含用于測量CPU_CRITICAL_ENTER()和CPU_CRITICAL_EXIT()宏的中斷禁用時間的函數,一個在CPU不提供指令的情況下模擬計數前導零指令的函數以及一些其他函數。
-uC-CPUcpu_core.h包含cpu_core.c中提供的功能的功能原型以及模塊用來測量中斷禁用時間的變量的分配。
-uC-CPUcpu_def.h包含μC/ CPU模塊使用的其他#define常數。

八、UCOSIII:函數指針

在os.h里,對于任務函數的數據類型是這么定義的:

typedef  void  (*OS_TASK_PTR)(void *p_arg);

這就用到了一種之前不怎么常用的用法:函數指針

函數指針的形式

1. 形式1:返回類型(*函數名)(參數表)

#include <iostream>using namespace std;//定義一個函數指針pFUN,它指向一個返回類型為char,有一個整型的參數的函數
char (*pFun)(int);
//定義一個返回類型為char,參數為int的函數
//從指針層面上理解該函數,即函數的函數名實際上是一個指針,
//該指針指向函數在內存中的首地址
char glFun(int a)
{cout << a;
}int main()
{
//將函數glFun的地址賦值給變量pFunpFun = glFun;
//*pFun”顯然是取pFun所指向地址的內容,當然也就是取出了函數glFun()的內容,然后給定參數為2。(*pFun)(2);return 0;
}

通過上面的一個小例子,我們知道了函數指針的用法,
而typedef可以讓函數指針更直觀方便

2. 形式2:typedef 返回類型(*新類型)(參數表)

typedef char (*PTRFUN)(int); 
//定義了一種PTRFUN的類型,并定義這種類型為指向某種函數的指針,這種函數以一個int為參數并返回char類型。后面就可以像使用int,char一樣使用PTRFUN了。PTRFUN pFun; 
//使用這個新類型定義了變量pFun,此時就可以像使用形式1一樣使用這個變量了。char glFun(int a){ return;} void main() 
{ pFun = glFun; //將函數指針指向定義的函數(*pFun)(2); //類似于變量指針的用法(使用*),只不過需要輸入實參
} 

參考資料:
typedef void (*Fun) (void) 的理解——函數指針——typedef函數指針

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

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

相關文章

Kubernetes: 本地部署dashboard

本篇文章主要是介紹如何在本地部署kubernetes dashboard, 部署環境是mac m2 下載dashboard.yaml 官網release地址: kubernetes/dashboard/releases 本篇文章下載的是kubernetes-dashboard-v2.7.0的版本&#xff0c;通過wget命令下載到本地: wget https://raw.githubusercont…

【Python】進階學習:pandas--isin()用法詳解

【Python】進階學習&#xff1a;pandas–isin()用法詳解 &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&#x1f448; 希望得到您的訂閱…

【NDK系列】Android tombstone文件分析

文件位置 data/tombstone/tombstone_xx.txt 獲取tombstone文件命令&#xff1a; adb shell cp /data/tombstones ./tombstones 觸發時機 NDK程序在發生崩潰時&#xff0c;它會在路徑/data/tombstones/下產生導致程序crash的文件tombstone_xx&#xff0c;記錄了死亡了進程的…

單細胞Seurat - 細胞聚類(3)

本系列持續更新Seurat單細胞分析教程&#xff0c;歡迎關注&#xff01; 維度確定 為了克服 scRNA-seq 數據的任何單個特征中廣泛的技術噪音&#xff0c;Seurat 根據 PCA 分數對細胞進行聚類&#xff0c;每個 PC 本質上代表一個“元特征”&#xff0c;它結合了相關特征集的信息。…

深入測探:用Python玩轉分支結構與循環操作——技巧、場景及面試寶典

在編程的世界里&#xff0c;分支結構和循環操作是構建算法邏輯的基礎磚石。它們如同編程的“鹽”&#xff0c;賦予代碼生命&#xff0c;讓靜態的數據跳躍起來。本文將帶你深入探索Python中的分支結構和循環操作&#xff0c;通過精心挑選的示例和練習題&#xff0c;不僅幫助你掌…

mysql5*-mysql8 區別

1.Mysql5.7-Mysql8.0 sysbench https://github.com/geekgogie/mysql57_vs_8-benchmark_scripts 1.讀、寫、刪除更新 速度 512 個線程以后才會出現如下的。 2.刪除速度 2.事務處理性能 3.CPU利用率 mysql8 利用率高。 4.排序 5.7 只能ASC&#xff0c;不能降序 數據越來越大

牢記于心單獨說出來的知識點(后續會加)

第一個 非十進制&#xff08;八進制&#xff0c;十六進制&#xff09;寫在文件中它本身就是補碼&#xff0c;計算機是不用進行內存轉換&#xff0c;它直接存入內存。&#xff08;因為十六進制本身是補碼&#xff0c;所以計算機里面我們看到的都是十六進制去存儲&#xff09; …

Qt 簡約美觀的加載動畫 文本風格 第八季

今天和大家分享一個文本風格的加載動畫, 有兩類,其中一個可以設置文本內容和文本顏色,演示了兩份. 共三個動畫, 效果如下: 一共三個文件,可以直接編譯 , 如果對您有所幫助的話 , 不要忘了點贊呢. //main.cpp #include "LoadingAnimWidget.h" #include <QApplic…

MySQL:開始深入其數據(一)DML

在上一章初識MySQL了解了如何定義數據庫和數據表&#xff08;DDL&#xff09;&#xff0c;接下來我們開始開始深入其數據,對其數據進行訪問&#xff08;DAL&#xff09;、查詢DQL&#xff08;&#xff09;和操作(DML)等。 通過DML語句操作管理數據庫數據 DML (數據操作語言) …

一文搞定 FastAPI 路徑參數

路徑參數定義 路徑操作裝飾器中對應的值就是路徑參數,比如: from fastapi import FastAPI app = FastAPI()@app.get("/hello/{name}") def say_hello(name: str):return {

突破編程_C++_STL教程( list 的基礎知識)

1 std::list 概述 std::list 是 C 標準庫中的一個雙向鏈表容器。它支持在容器的任何位置進行常數時間的插入和刪除操作&#xff0c;但不支持快速隨機訪問。與 std::vector 或 std::deque 這樣的連續存儲容器相比&#xff0c;std::list 在插入和刪除元素時不需要移動其他元素&a…

計算機網絡之傳輸層 + 應用層

.1 UDP與TCP IP中的檢驗和只檢驗IP數據報的首部, 但UDP的檢驗和檢驗 偽首部 首部 數據TCP的交互單位是數據塊, 但仍說TCP是面向字節流的, 因為TCP僅把應用層傳下來的數據看成無結構的字節流, 根據當時的網絡環境組裝成大小不一的報文段.10秒內有1秒用于發送端發送數據, 信道…

【Python】進階學習:pandas--groupby()用法詳解

&#x1f4ca;【Python】進階學習&#xff1a;pandas–groupby()用法詳解 &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&#x1f448;…

Python算法100例-3.5 親密數

1.問題描述2.問題分析3.算法設計4.確定程序框架5.完整的程序6.問題拓展 1&#xff0e;問題描述 如果整數A的全部因子&#xff08;包括1&#xff0c;不包括A本身&#xff09;之和等于B&#xff0c;且整數B的全部因子&#xff08;包括1&#xff0c;不包括B本身&#xff09;之和…

中國電子學會2020年6月份青少年軟件編程Sc ratch圖形化等級考試試卷四級真題。

第 1 題 【 單選題 】 1.執行下面程序&#xff0c;輸入4和7后&#xff0c;角色說出的內容是&#xff1f; A&#xff1a;4&#xff0c;7 B&#xff1a;7&#xff0c;7 C&#xff1a;7&#xff0c;4 D&#xff1a;4&#xff0c;4 2.執行下面程序&#xff0c;輸出是&#xff…

Oracle自帶的網絡工具(計算傳輸redo需要的帶寬,使用STATSPACK,計算redo壓縮率,db_ultra_safe)

--根據primary database redo產生的速率,計算傳輸redo需要的帶寬. 除去tcp/ip網絡其余30%的開銷,計算需要的帶寬公式: 需求帶寬((每秒產生redo的速率峰值/0.75)*8)/1,000,000帶寬(Mbps) --可以通過去多次業務高峰期的Statspack/AWR獲取每秒產生redo的速率峰值,也可以通過查詢視…

post請求體內容無法重復獲取

post請求體內容無法重復獲取 為什么會無法重復讀取呢&#xff1f; 以tomcat為例&#xff0c;在進行請求體讀取時實際底層調用的是org.apache.catalina.connector.Request的getInputStream()方法&#xff0c;而該方法返回的是CoyoteInputStream輸入流 public ServletInputStream…

CVE-2016-5195 復現記錄

文章目錄 poc前置知識頁表與缺頁異常/proc/self/mem的寫入流程madvise 漏洞點修復 Dirty COW臟牛漏洞是一個非常有名的Linux競爭條件漏洞&#xff0c;雖然早在2016年就已經被修復&#xff0c;但它依然影響著眾多古老版本的Linux發行版&#xff0c;如果需要了解Linux的COW&#…

Redis7 實現持久化的三種方式

1、概述 1.1、Redis持久化的重要性 數據恢復&#xff1a;Redis是一個內存數據庫&#xff0c;如果系統或服務宕機&#xff0c;內存中的數據將會丟失。Redis的持久化機制可以把數據保存到磁盤上&#xff0c;以便在系統重啟后恢復數據。這是Redis持久化最基本也是最重要的功能。…

JCL中IEFBR14和COND

JCL中IEFBR14和COND ? COND CODE&#xff0c;就是反映JCL中STEP運行狀態的參數&#xff0c;JCL正常終了的COND CODE 是0000&#xff0c;另外筆者在執行某些工具JCL時候&#xff0c;比方說簡單一個COMPARE吧&#xff0c;可能會出現0012、0004或者0016&#xff0c;0001&#xf…