初版BL程序一些細節整理(碎碎念)

一.串口的中斷觸發

? ? ? ? 一般我們都是使用TXE或者RXNE來觸發中斷,其實還有完整傳輸結束的TC標志位和接收完成的IDLE標志位

? ? ? ? 這兩個標志位有些不同,RXNE標志位只需要讀取寄存器就會自行清除,但是這兩個需要讀取兩個,拿IDLE舉例子

這里需要這么寫,才能清理標志位

二.關于DMA提前人為中斷

????????如果手動disable了DMA,那么TCIF標志位會立馬掛起

但是如果不清除該標志位,DMA就無法啟動

所以我們再配置好DMA后,啟動前,要清理標志位,1,2兩種清理方式,任意一種都行

三.3種關于定義print導向串口輸出的方法

1.覆寫庫函數

基礎概念

關于怎么覆寫標準庫里面的原函數_c語言編譯,怎么覆蓋庫文件的函數-CSDN博客

我們首先需要點開keil中的MicroLIB庫

什么是MicroLIB庫,為什么需要點開

這是keil的精簡C語言庫,代碼量少很多,他使用是了標準庫的頭文件接口,接口在編譯階段會被鏈接到選擇的庫(比如 MicroLIB)的 實現部分。

同時他的底層實現函數和標準庫的不同

這里我們需要重新定義他的底層fputc()函數,一下定義即可

2.使用sprintf打印到字符數組,再用串口發送字符數組,此方法打印到字符數組

3.將sprintf函數封裝起來,實現專用的printf,此方法就是把方法2封裝起來

方法三涉及到可變參函數,這里介紹說明如何使用和原理

四.可變參函數

1.我們首先需要添加<stdarg.h>頭文件,包括一下宏

首先類似void Serial_Printf(char *format, ...),這種帶有....的函數就是,可變參函數,他允許你

👆這些操作都是合理的

2.實現原理
?

首先每個函數的調用就會構建一個屬于自己的棧空間,存放自己的變量

va_list args;可以理解為生成了一個棧指針

va_start(arg, format);可以理解為將棧指針指向format后

所以使用va_arg(arg, int);取出數據的時候,會直接取走format后面的int類型數據,類似👇操作

?va_end(arg);就是清理掉之前的指針

這樣上面的代碼就很簡單可以看懂了 ,下面的這個代碼也能輕松看懂使用了

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

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

相關文章

為何京東與螞蟻集團競相申請穩定幣牌照?

京東與螞蟻集團競相申請穩定幣牌照&#xff0c;主要是為了搶占數字金融新賽道&#xff0c;結合香港的寬松監管政策與全球穩定幣市場的快速增長。香港2023年推出的穩定幣監管框架及2025年8月即將實施的《穩定幣條例》&#xff0c;為企業提供了合規路徑&#xff0c;吸引京東通過幣…

[特殊字符] Harmony OS Next里的Web組件:網頁加載的全流程掌控手冊

&#x1f389; Harmony OS Next里的Web組件&#xff1a;網頁加載的全流程掌控手冊 ##Harmony OS Next ##Ark Ts ##教育 本文適用于教育科普行業進行學習&#xff0c;有錯誤之處請指出我會修改。 開發者必看的生命周期回調詳解代碼實操指南 作為開發者&#xff0c;你可能經常需…

【Java學習筆記】集合介紹

集合 > > 集合的引出 在之前常使用數組存儲數據&#xff0c;存在的問題如下&#xff1a; &#xff08;1&#xff09;初始化時&#xff0c;長度必須指定&#xff0c;而且一旦指定&#xff0c;不能更改 &#xff08;2&#xff09;不方便擴容&#xff08;使用循環復制原…

電流傳感器在汽車中的應用:從BMS電池管理到電機控制的工程解析

1 電流傳感器&#xff1a;汽車電子系統的神經末梢 在現代汽車電子架構中&#xff0c;電流傳感器已從簡單的測量元件演變為??關鍵的安全與性能組件??。作為動力系統的“神經末梢”&#xff0c;它們持續采集電流參數并反饋至控制單元&#xff0c;構成??實時閉環控制的基礎…

積分商城拼團系統框架設計

一、邏輯分析 用戶相關邏輯 用戶注冊與登錄&#xff1a;用戶需要注冊賬號才能參與積分商城拼團活動。注冊過程中需收集必要信息&#xff0c;如用戶名、密碼、聯系方式等。登錄功能則用于驗證用戶身份&#xff0c;方便用戶后續操作。用戶積分管理&#xff1a;用戶通過各種途徑&a…

java 數據結構-HashMap

一、hashmap特點 1、HashMap 是一個散列表,它存儲的內容是鍵值對(key-value)映射。 2、HashMap 實現了 Map 接口,根據鍵的 HashCode 值存儲數據,具有很快的訪問速度,最多允許一條記錄的鍵為 null,不支持線程同步。 3、HashMap 是無序的,即不會記錄插入的順序。 4、HashMa…

DBSyncer:一款開源的數據同步工具

DBSyncer&#xff08;簡稱 dbs&#xff09;是一款開源的實時數據同步中間件&#xff0c;提供 MySQL、Oracle、SQL Server、PostgreSQL、SQLite、Elasticsearch、Kafka、File、SQL 數據庫等同步場景&#xff1b;支持上傳插件自定義同步轉換業務&#xff1b;提供監控全量和增量數…

大型語言模型的中毒攻擊的系統評價

大家讀完覺得有幫助記得及時關注和點贊&#xff01;&#xff01;&#xff01; 抽象 隨著預訓練大型語言模型 &#xff08;LLM&#xff09; 及其訓練數據集的廣泛使用&#xff0c;人們對與其使用相關的安全風險的擔憂顯著增加。 這些安全風險之一是 LLM 中毒攻擊的威脅&#xff…

Windows 10更新失敗解決方法

前言 在我們使用 Windows 時的時候&#xff0c;很多時候遇到系統更新 重啟之后卻一直提示“我們無法完成更新&#xff0c;正在撤銷更改” 這種情況非常煩人&#xff0c;但其實可以通過修改文件的方法解決&#xff0c;并且正常更新到最新版操作系統 01修改注冊表 管理員身份…

Redis高級|Redis單線程VS多線程(基礎)

文章目錄 面試題Redis為什么選擇單線程為什么逐漸加入多線程特性Redis6、Redis7的多線程特性和IO多路復用入門Redis7多線程 面試題 Redis到底是單線程還是多線程&#xff1f;IO多路復用聽說過嗎&#xff1f;Redis為什么這么快&#xff1f; Redis為什么選擇單線程 其實Redis單…

ONLYOFFICE 的AI技巧-1.集成OCR、文本轉圖像、電子表格集成等新功能

隨著人工智能不斷革新數字辦公空間&#xff0c;我們通過全新的 ONLYOFFICE AI 插件再次實現突破。無論您是長期用戶還是新手&#xff0c;這些更新都將讓您的文檔處理更加智能、直觀且高效。讓我們一起來了解這些最新增強功能——部分功能已在 ONLYOFFICE 文檔 8.3.3 版本中上線…

Snipaste:一款簡單強大的跨平臺截圖工具

給大家介紹一款我在日常寫作中使用的截圖工具&#xff1a;Snipaste 。它是一個支持截圖&#xff08;Snip&#xff09;和貼圖&#xff08;Paste&#xff09;功能的免費軟件&#xff0c;支持 Windows、macOS、Linux 跨平臺。 智能截圖 Snipaste 提供了強大的截圖功能&#xff0c…

python學習打卡day52

DAY 52 神經網絡調參指南 知識點回顧&#xff1a; 隨機種子內參的初始化神經網絡調參指南 參數的分類調參的順序各部分參數的調整心得 作業&#xff1a;對于day41的簡單cnn&#xff0c;看看是否可以借助調參指南進一步提高精度。 day41的簡單CNN最后的結果&#xff0c;今天要做…

自定義線程池 4.0

自定義線程池 4.0 1. 簡介 上次我們實現了自定義線程池的 3.1 版本&#xff0c;提供了線程工廠創建線程和工具類創建簡單線程池的功能&#xff0c;增強了線程池的靈活性&#xff0c;并且用起來更加方便了&#xff0c;本文我們將做如下的優化&#xff1a; 給線程池添加關閉的…

list is not in GROUPBY clause and contains nonaggregated column ‘*.*‘

SELECT list is not in GROUP BY clause and contains nonaggregated column mydb.t.address which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by 關于查詢列不在分組字段內觸發錯誤 之前我一直使用其…

Linux vmware image iso qcow2鏡像大全

Download Linux VMware Images | Linux VMware Images

城市排水管網液位流量監測系統解決方案

一、方案背景 城市排水管網作為城市的“生命線”&#xff0c;其運行狀況直接關系到城市的防洪排澇、水環境質量以及居民的生活質量。隨著城市化進程的加速&#xff0c;城市排水管網規模不斷擴大&#xff0c;結構日益復雜&#xff0c;傳統的人工巡檢和簡單監測手段已難以滿足對排…

算法學習筆記:3.廣度優先搜索 (BFS)——二叉樹的層序遍歷

什么是廣度優先搜索 (BFS)? 想象一下你在玩一個迷宮游戲&#xff0c;你需要找到從起點到終點的最短路徑。廣度優先搜索 (BFS) 就像是你在迷宮中逐層探索的過程&#xff1a; 先探索距離起點最近的所有位置然后探索距離起點第二近的所有位置以此類推&#xff0c;直到找到終點 …

并發編程-Synchronized

Mark Word 什么是Mark Word&#xff1f; Mark Word是Java對象頭中的一個字段&#xff0c;它是一個32位或64位的字段&#xff08;取決于系統架構&#xff09;&#xff0c;用于存儲對象的元數據信息。這些信息包括對象的哈希碼、鎖狀態、年齡等。 Mark Word有什么用&#xff1f…

【51單片機】5. 矩陣鍵盤與矩陣鍵盤密碼鎖Demo

1. 矩陣鍵盤原理 通過矩陣連接的模式&#xff0c;原本需要16個引腳連接的按鈕只需要8個引腳就能連接好&#xff0c;減少了I/O口的占用。 矩陣按鈕是通過掃描來讀取狀態的。 2. 掃描的概念 輸出掃描示例&#xff1a;數碼管掃描 原理&#xff1a;顯示第1位→顯示第2位→顯示第…