C語言學習【1】C語言關于寄存器的封裝

目錄

  • 1.封裝寄存的C語言的語法
    • volatile:
    • unsigned int:
    • *pGpiobOdr
    • volatile unsigned int *
  • 2.進一步C語言的封裝

在嵌入式中,底層一定是操作寄存器,我有一個理念,凡事一定要想清楚,把任何知識點融入自己的理解之中,這樣不被技術限制的同時,還能讓自己其他方面的認識得到進步。
下面我把自己的理解寫出來,拋磚引玉!

1.封裝寄存的C語言的語法

volatile:

編譯器在處理變量的時候,為了效率考慮,對于頻繁修改的變量會把他放在緩存(CPU里面的緩存比RAM速度快的多的多)中進行計算,等到不頻繁或者確實需要寫入內存的時候,才會寫到RAM中,不會實時的和RAM交互,對于寄存器這種和外界交互的“內存”來說,就會出現問題,看似我操作了寄存器,實際上我是自娛自樂
可以這么記憶,底層操作必須用這個volatile把寄存器和變量綁定在一起才能用,不然這個程序就不能用,或者這個數字是極其關鍵的,實時更新!

unsigned int:

寄存器都是32位的,在32位單片機中,我們需要一個能覆蓋32的數據類型,這個數據類型就是int,你問long int能不能行,其實也是可以的,不過計算起來就會非常的麻煩,unsigned是為了保證int32位都是可以說的(signed類型最高位會變成正負號)
也就是說,用unsigned int這個數據類型和整形這個概念沒有關系,只和占據32位有關系

*pGpiobOdr

指針,對于指針我們都知道是指的一個地址,但是我們要明白在實現世界還是程序代碼的世界,都是有空間時間這個概念的(by the way,多維數組表示三維空間,有點類似于二向箔對三維的二維展開),既然是一個地址根本代表不了什么,還需要知道這個地址起始,占據的空間,占據空間這個維度就需要數據類型指定,你給什么數據類型,你就在內存中圈多大的地盤,這個就是前面定義的 unsigned int參數的作用

volatile unsigned int *

強制類型轉換,c語言要求必須和前面指針類型的一致,不然就會警報。

在這里插入圖片描述

2.進一步C語言的封裝

C語言的進一步封裝就是用結構體把大塊的內存框起來,比如關于GPIOA所有寄存器全部用結構體框起來,GPIOA內部的多個寄存器,用結構體成員區分,其實就是先用結構體圈地,然后把圈來得地分割,為什么要加結構體這個環節,主要是為了方便管理,層次分明才能邏輯清晰,打個比喻,本來你的各類資料胡亂幾千本放在一個大箱子里面,你要去尋找一個叫做東京有點熱的學習資料,發現你要一本本的去翻,這個時候你完全可以整幾個箱子分類放置,我們就可以很快的找到,很快的學習了!
在這里插入圖片描述

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

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

相關文章

#滲透測試#批量漏洞挖掘#暢捷通T+遠程命令執行漏洞

免責聲明 本教程僅為合法的教學目的而準備,嚴禁用于任何形式的違法犯罪活動及其他商業行為,在使用本教程前,您應確保該行為符合當地的法律法規,繼續閱讀即表示您需自行承擔所有操作的后果,如有異議,請立即停止本文章讀。 目錄 一、漏洞概況 二、攻擊特征 三、應急處置…

ollama 學習筆記

1. 參考博客:1. Ollama完整教程:本地LLM管理、WebUI對話、Python/Java客戶端API應用:https://blog.csdn.net/python122_/article/details/1409457202. https://gitee.com/ai-big-model/ollama/tree/main --》REST APIollama 離線安裝包 ollam…

ARM Linux平臺下 OpenCV Camera 實驗

一、硬件原理 1. OV2640 1.1 基本功能 OV2640 是一款低功耗、高性能的圖像傳感器,支持以下功能: 最高分辨率:200 萬像素(1600x1200)。 輸出格式:JPEG、YUV、RGB。 內置圖像處理功能:自動曝…

vue2.x中父組件通過props向子組件傳遞數據詳細解讀

1. 父組件向子組件傳遞數據的步驟 在子組件中定義 props: 子組件通過 props 選項聲明它期望接收的數據。props 可以是數組形式(簡單聲明)或對象形式(支持類型檢查和默認值)。 在父組件中使用子組件時綁定 props&#x…

【Gin】2:快速上手Gin框架(模版、cookie、session)

本文目錄 一、模版渲染二、自定義模版函數三、cookie四、Session五、cookie、session區別六、會話攻擊 一、模版渲染 在 Gin 框架中,模板主要用于動態生成 HTML 頁面,結合 Go 語言的模板引擎功能,實現數據與視圖的分離。 模板渲染是一種動態…

【AI繪畫】大衛? 霍克尼風格——自然的魔法(一丹一世界)

大衛? 霍克尼,很喜歡這個老頭,“藝術是一場戰斗”。老先生零九年有了iphone,開始用iphone畫畫,一零年開始用ipad畫畫,用指頭劃拉,據說五分鐘就能畫一幅,每天早上隨手畫幾幅送給身邊的朋友。很c…

解碼 NLP:從萌芽到蓬勃的技術蛻變之旅

內容概況: 主要講述NLP專欄的內容和NLP的發展及其在現代生活中的廣泛應用。專欄強調實踐為主、理論為輔的學習方法,并通過多個生活場景展示了NLP技術的實際應用,如對話機器人、搜索引擎、翻譯軟件、電商推薦和智能客服等。 這邊我就不多做自我…

解決DeepSeek服務器繁忙問題的實用指南

目錄 簡述 1. 關于服務器繁忙 1.1 服務器負載與資源限制 1.2 會話管理與連接機制 1.3 客戶端配置與網絡問題 2. 關于DeepSeek服務的備用選項 2.1 納米AI搜索 2.2 硅基流動 2.3 秘塔AI搜索 2.4 字節跳動火山引擎 2.5 百度云千帆 2.6 英偉達NIM 2.7 Groq 2.8 Firew…

前端(AJAX)學習筆記(CLASS 2):圖書管理案例以及圖片上傳

* BootStrap彈框 功能:不離開當前頁面,顯示單獨內容,供用戶操作 步驟: 1、引入bootstrap.css和bootstrap.js 2、準備彈框標簽,確認結構 3、通過自定義屬性,控制彈框的顯示和隱藏 其中的bootstrap.css…

數據結構:雙鏈表list

list 是 C 標準庫中的雙向鏈表容器。 list初始化示例&#xff1a; #include <list>int n 7;std::list<int> lst; // 初始化一個空的雙向鏈表 lststd::list<int> lst(n); // 初始化一個大小為 n 的鏈表 lst&#xff0c;鏈表中的值默認都為 0std::list<i…

AI Agent Service Toolkit:一站式大模型智能體開發套件

項目簡介 該工具包基于LangGraph、FastAPI和Streamlit構建,提供了構建和運行大模型Agent的最小原子能力,包含LangGraph代理、FastAPI服務、用于與服務交互的客戶端以及一個使用客戶端提供聊天界面的Streamlit應用。用戶可以利用該工具包提供的模板快速搭建基于LangGraph框架…

論文概覽 |《Urban Analytics and City Science》2023.10 Vol.50 Issue.8

本次給大家整理的是《Environment and Planning B: Urban Analytics and City Science》雜志2023年10月第50卷第8期的論文的題目和摘要&#xff0c;一共包括21篇SCI論文&#xff01; 論文1 Advances in geospatial approaches to transport networks and sustainable mobility …

大語言模型推理能力從何而來?

前言 DeepSeek R1采用強化學習進行后訓練&#xff0c;通過獎勵機制和規則引導模型生成結構化思維鏈&#xff08;CoT&#xff09;&#xff0c;從而顯著提升了推理能力。這一創新方法使得DeepSeek R1能夠在無需大量監督數據的情況下&#xff0c;通過自我進化發展出強大的推理能力…

用 WOW.js 和 animate.css 實現動畫效果

用 wow.js 就可以實現動畫效果&#xff0c;但由于里面的動畫樣式太少&#xff0c;一般還會引入 animated.css 第一步&#xff1a;下載 選擇合適的包管理器下載對應的內容 pnpm i wow.js animated.css --save 第二步&#xff1a;引入 在main.js中加入&#xff1a; import …

設計模式教程:解釋器模式(Interpreter Pattern)

1. 什么是解釋器模式&#xff1f; 解釋器模式&#xff08;Interpreter Pattern&#xff09;是一種行為型設計模式&#xff0c;通常用于處理語言&#xff08;例如數學表達式、SQL查詢等&#xff09;中的語法和解釋。該模式定義了一個文法&#xff0c;并通過解釋器類來解釋文法中…

STM32MP157A單片機移植Linux驅動深入版

需求整理 在Linux設備樹中新增leds節點&#xff0c;其有3個gpio屬性&#xff0c;分別表示PE10對應led1&#xff0c;PF10對應led2&#xff0c;PE8對應led3&#xff0c;設備樹鍵值對如下&#xff1a; leds { led1-gpio <&gpioe 10 0>; led2-gpio &l…

本地DeepSeek模型GGUF文件轉換為PyTorch格式

接前文,我們在本地Windows系統上,基于GGUF文件部署了DeepSeek模型(DeepSeek-R1-Distill-Qwen-1.5B.gguf版本),但是GGUF是已經量化的版本,我們除了對其進行微調之外,無法對其訓練,那么還有沒有其他辦法對本地的GGUF部署的DeepSeek模型進行訓練呢?今天我們就反其道而行之…

http代理IP怎么實現?如何解決代理IP訪問不了問題?

HTTP代理是一種網絡服務&#xff0c;它充當客戶端和目標服務器之間的中介。當客戶端發送請求時&#xff0c;請求首先發送到代理服務器&#xff0c;然后由代理服務器轉發到目標服務器。同樣&#xff0c;目標服務器的響應也會先發送到代理服務器&#xff0c;再由代理服務器返回給…

人工智能之數學基礎:施密特正交化

本文重點 在前面的課程中,我們學習了線性空間的基,其中有一個標準正交基的概念,假設現在有一個線性向量空間,然后已經確定了該線性空間的一組基,那么如何將其轉變為標準正交基。本文將學習如何通過施密特正交化完成這個任務。 施密特正交化 施密特正交化(Schmidt Orth…

Spark(2)linux和簡單命令

&#xff08;一&#xff09;Linux的文件系統 文件系統&#xff1a;操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統。 文件系統的結構通常叫做目錄樹結構&#xff0c;從斜桿/根目錄開始; Linux號稱萬物皆文件&#xff0c;意味著針對Linux的操作&#xff0c;大多…