標準庫開發和寄存器開發的區別

1.標準庫

void GPIO_Toggle_INIT(void)//初始化GPIO
{GPIO_InitTypeDef GPIO_InitStructure = {0};//定義GPIO結構體RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIO時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//GPIO引腳選擇GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO速度GPIO_Init(GPIOA, &GPIO_InitStructure);//傳參配置
}

①GPIO_InitTypeDef

②RCC_APB2PeriphClockCmd

標準庫是廠商提供的,我們所說的標準庫開發方式本質就是對地址進行封裝。而我們所說的寄存器開發方式就是對地址進行直接操作。

2.寄存器開發

下圖是51單片機芯片頭文件

實際上就是對地址是直接操作,讓地址映射為寄存器名,方便程序員開發

①sfr

  • sfr?用于定義這些寄存器的別名,方便程序員通過名字直接訪問寄存器。如P0

sfr 寄存器名 = 地址;  
sfr P0 = 0x80;   // 定義 P0 口的寄存器,地址為 80H 

????②sbit

  • sbit?用于定義寄存器的單個位的別名,可直接操作 1 個比特。

sbit 位名 = 寄存器名 ^ 位位置;  
或  
sbit 位名 = 地址 ^ 位位置;  
sbit LED = P0 ^ 0;   // 定義 P0 口的第 0 位 

3.總結

標準庫開發方式:

  1. 提供了對底層硬件的抽象封裝
  2. 通過API函數調用實現功能
  3. 開發效率高,代碼可移植性強
  4. 適合快速開發和產品原型驗證
  5. 示例:STM32的HAL庫、標準外設庫

寄存器開發方式:

  1. 直接操作MCU的寄存器地址
  2. 需要對芯片手冊有深入了解
  3. 執行效率更高,代碼量更小
  4. 適合對性能和資源要求嚴格的場合
  5. 示例:直接配置GPIO寄存器控制LED

實際應用中,通常采用混合開發方式:

  • 對性能要求高的部分使用寄存器操作
  • 其他部分使用標準庫提高開發效率

具體到開發步驟:

  1. 標準庫方式:

    • 包含對應頭文件
    • 調用初始化函數
    • 使用API完成功能
  2. 寄存器方式:

    • 查閱芯片手冊獲取寄存器地址
    • 定義寄存器指針
    • 直接讀寫寄存器

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

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

相關文章

在 WebSocket 中使用 @Autowired 時遇到空指針異常

背景:在websocket在有新的連接加入進來時,調用servier中的服務,使用 Autowired 注入的 Bean 竟然是 null!這并非 Spring 的 Bug,而是對 WebSocket 生命周期管理理解不足導致的。了解這個問題,我們需要區分兩…

MGER實驗

一、實驗拓撲圖二、配置1.R5為ISP,只能進行IP地址配置,其所有地址均配為公有IP地址R1側為15.1.1.1,對應R5為15.1.1.2R2側為25.1.1.2,對應R5為25.1.1.1R3側為35.1.1.2,對應R5為35.1.1.1R4側為45.1.1.2,對應R…

基于 XGBoost 與 SHAP 的醫療自動化辦公與可視化系統(下)

— 登錄接口 — @app.post(“/token”) def login(form_data: OAuth2PasswordRequestForm = Depends()): user = fake_users_db.get(form_data.username) if not user or form_data.password != user[“password”]: raise HTTPException(status_code=400, detail=“用戶名或密…

python學智能算法(二十九)|SVM-拉格朗日函數求解中-KKT條件

引言 前序學習進程中,對拉格朗日函數執行了初步求導,并獲得了簡化后的拉格朗日函數極值計算式: L(w,b,α)∑i1mαi?12∑i,j1mαiαjyiyjxiTxjL(w,b,\alpha)\sum_{i1}^{m}\alpha_{i}-\frac{1}{2}\sum_{i,j1}^{m}\alpha_{i}\alpha_{j}y_{i}y_…

【AI論文】MiroMind-M1:通過情境感知多階段策略優化實現數學推理的開源新進展

摘要:近期,大型語言模型已從流暢的文本生成發展至能在多個領域進行高級推理,由此催生了推理語言模型(RLMs)。在眾多領域中,數學推理堪稱代表性基準,因為它需要精確的多步驟邏輯與抽象推理能力&a…

《使用Qt Quick從零構建AI螺絲瑕疵檢測系統》——6. 傳統算法實戰:用OpenCV測量螺絲尺寸

目錄一、概述1.1 背景介紹:從“看見”到“看懂”1.2 學習目標二、圖像預處理:讓目標更突出三、輪廓發現與尺寸測量四、總結與展望一、概述 1.1 背景介紹:從“看見”到“看懂” 在上一篇文章中,我們成功地為應用程序安裝了“眼睛…

《人性的弱點》重構【01】

手上有本《人性的弱點》(韓文橋 譯,浙江文藝出版社,2017.1出版),前些年買的,近期翻出來看看。這門書雖成書于80多年前,但卡耐基對人性洞察之深刻,時至今日,并未覺得過時。…

k8s開啟審計日志

k8s默認是關閉審計功能的,想看的話需要到apiserver的pod中才可以。 開啟此功能是為了進行k8s審計日志的收集,方便我們查看k8s中用戶的各自操作。 開啟此功能之前,我們要先創建個審計策略文件audit-policy.yaml 例如以下的測驗文件 apiVersion…

Kafka MQ 消費者應用場景

Kafka MQ 消費者應用場景 1 消費者自動提交的時機 在 Kafka 中默認的消費位移的提交方式是自動提交,這個由消費者客戶端參數 enable.auto.commit 配置,默認值為 true。當然這個默認的自動提交不是每消費一條消息就提交一次,而是定期提交,這個定期的周期時間由客戶端參數 …

Git版本控制系統

Git作為目前最流行的分布式版本控制系統,已經成為開發者必備的技能之一。本文將全面介紹Git的核心概念、基本操作、分支管理以及與GitHub的協作開發,幫助讀者從零開始掌握Git的使用。 一、Git概述 1.1 Git發展歷史 Git誕生于2005年,由Linu…

如何編譯RustDesk(Unbuntu 和Android版本)

編譯Linux版本的RustDesk備注:官方文檔上,一邊都是基于sciter,這個在后面已經不建議使用了,但是依然可以編譯剛開始的時候看官方的文檔,涉及的東西比較多,也搞的一頭霧水,通過B站上一個視頻&…

Spring中的循環依賴:解密、破局與架構啟示

> 當兩個Bean緊緊相擁,Spring容器卻陷入死鎖——這是Java開發者的經典噩夢 某電商平臺凌晨上線時突然宕機,日志里反復滾動著`BeanCurrentlyInCreationException`的報錯。經排查,**優惠券服務與庫存服務在初始化時相互依賴**,形成致命閉環。這個價值百萬的故障案例,揭開…

DataFrame?(數據框)

一種二維表格型數據結構,類似于電子表格(如 Excel)或 SQL 表,由行(記錄)?和列(字段)?組成。它是數據分析、機器學習和科學計算中最常用的數據結構之一,尤其在 ?Python…

B站視頻評論數據爬取

爬取B站視頻評論數據爬取與分析 如果只要單純的腳本可以直接看項目結構里的b_comments.py 一、技術架構 1、環境配置 Python 3.8PyCharm 2、模塊配置 requests:用于發送HTTP請求time:用于處理時間相關的操作csv:用于讀寫CSV文件json&#xff…

OpenAI最新大模型GPT-4o體驗之Code Copilot AI編程大模型

一、前言GPT-4o("o"代表"全能")具備處理各種文本、聲音和圖像資料的能力,能夠輸出多種格式的文本、聲音和圖像。GPT-4o 的推出標志著 AI 技術的重大突破。它不再局限于單一媒介,而是首次實現了文本、語音和圖…

社交電商推客系統全棧開發指南:SpringCloud+分潤算法+Flutter跨端

一、推客系統概述與市場背景推客系統(TuiKe System)是一種基于社交關系的營銷推廣平臺,通過用戶分享商品或服務鏈接,實現裂變式傳播和精準營銷。近年來,隨著社交電商的蓬勃發展,推客系統已成為企業獲客的重…

網安-中間件-Redis未授權訪問漏洞

目錄 Redis Redis持久化 動態修改配置 使用反彈連接的情況 常見監聽端口的方式 常見建立反彈連接的方式 流程 Linux crontab cron文件存儲路徑 利用Redis實現攻擊 1.webshell提權案例 2.定時任務shell反彈案例 3.SSH Key getshell案例 ?編輯Redis其他利用方式 …

【c++深入系列】:萬字詳解棧和隊列和deque(附模擬實現的源碼)

🔥 本文專欄:c 🌸作者主頁:努力努力再努力wz 💪 今日博客勵志語錄: 石頭能被水滴穿,不是因為水有多強,而是因為它從未停過。 ★★★ 本文前置知識: 模版 棧 那么棧這個…

速通python加密之RSA加密

RSA加密 RSA加密是一種非對稱加密算法(與AES等對稱加密不同),由羅納德李維斯特(Ron Rivest)、阿迪薩莫爾(Adi Shamir)和倫納德阿德曼(Leonard Adleman)于1977年提出&…

Java BeanUtils 類詳解:作用、語法與示例

一、BeanUtils 的核心作用BeanUtils 是 Apache Commons 和 Spring Framework 提供的工具類,主要用于簡化 JavaBean 的操作。核心功能包括:屬性拷貝:對象間同名屬性自動復制動態訪問:通過字符串名稱操作屬性類型轉換:自…