九、e2studio VS STM32CubeIDE之const修飾BSP函數的形參

目錄

一、概述/目的

二、通過串口發送函數對比

2.1 stm32 hal庫 VS renesas FSP

2.2 const修改函數形參的作用

2.2.1 值傳遞-副本

2.2.2 指針傳遞(就近原則)

2.2.2.1 const修飾:*P

2.2.2.2 const修飾:指針變量P

2.2.2.3 const修飾:*P和P

三、總結


一、概述/目的

1、繼續【嵌入式科普(16)c語言函數參數的傳遞方式】話題,對比BSP函數的封裝
2、通過對比分享const修飾函數的形參的作用和目的

二、通過串口發送函數對比

2.1 stm32 hal庫 VS renesas FSP

  • stm32 hal庫

HAL_StatusTypeDef HAL_UART_Transmit_IT( UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
  • renesas FSP

fsp_err_t R_SCI_UART_Write (uart_ctrl_t * const p_api_ctrl, uint8_t const * const p_src, uint32_t const bytes)

2.2 const修改函數形參的作用

2.2.1 值傳遞-副本

  • uint32_t const bytes和const uint32_t bytes等價

  • 表示整型變量bytes不可修改

  • 形參bytes是副本,無法修改原值,但可以修改

  • const修飾形參bytes,函數內也無法修改

2.2.2 指針傳遞(就近原則)

2.2.2.1 const修飾:*P
  • const uint8_t *pData和 uint8_t const *pData等價

  • 表示函數內無法修原數據,保護原始數據

  • 但函數內可以修改pData,例如pData++;

2.2.2.2 const修飾:指針變量P
  • uart_ctrl_t * const p_api_ctrl

  • 表示函數內無法修改指針p_api_ctrl,也就是常量指針,即p_api_ctrl++是錯誤的

  • 但指針p_api_ctrl指向的原值可以修改,即p_api_ctrl->open可以修改

2.2.2.3 const修飾:*P和P
  • uint8_t const * const p_src

  • 表示指針變量p_src(常量指針)和p_src指向的內容都無法修改

  • 表示函數內無法修原數據(保護原始數據),函數內也不能修改指針p_src(常量指針),即p_src++

三、總結

  • const修飾按就近原則理解,可能有:修飾基本類型、指針類型P、*P

  • const修飾誰,誰就無法改變,即只讀,無法++。例如無法p++、*p++

  • const修飾庫函數形參,保證了非需要的修改原值,也保證了函數內非需要的修改,也起到提醒實現函數的程序員

  • 瑞薩的FSP提高代碼的可讀性和安全性,通過限制變量和指針的修改來減少意外錯誤的可能性。

圖片

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

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

相關文章

手擼XXL-JOB(二)——定時任務管理

在上一節中,我們介紹了SpringBoot中關于定時任務的執行方式,以及ScheduledExecutorService接口提供的定時任務執行方法。假設我們現在要寫類似XXL-JOB這樣的任務調度平臺,那么,對于任務的管理,是尤為重要的。接下來我們…

最新Linux Debian12安裝和使用ImageMagick圖像處理工具 常見圖片png、jpg格式轉webp格式

在Linux系統中,使用ImageMagick可以圖片格式轉換,其中最常用的是通過命令行工具進行。 ImageMagick是一個非常強大的圖像處理工具集,它包含了許多用于圖像轉換的命令。 一、安裝ImageMagick(如果尚未安裝)&#xff1…

在線音樂系統

文章目錄 在線音樂系統一、項目演示二、項目介紹三、部分功能截圖四、部分代碼展示五、底部獲取項目(9.9¥帶走) 在線音樂系統 一、項目演示 音樂網站 二、項目介紹 基于springbootvue的前后端分離在線音樂系統 登錄角色 : 用戶、管理員 用…

外文文獻查找以及下載渠道

尋找外文文獻的渠道有很多種: 學術數據庫和期刊網站:像PubMed、IEEE Xplore、ScienceDirect等學術數據庫和期刊網站是獲取外文文獻的主要渠道之一。這些平臺通常提供了廣泛的學術資源,包括期刊文章、會議論文等。 學術搜索引擎:…

Git 的原理與使用(中)

Git 的原理與使用(上)中介紹了Git初識,Git的安裝與初始化以及工作區、暫存區、版本庫相關的概念與操作,本文接著上篇的內容,繼續深入介紹Git在的分支管理與遠程操作方面的應用。 目錄 五、分支管理 1.理解分支 2.創…

java約拍攝影小程序

獲取源碼配套資料論文等、問題解答,可以加華神扣扣:3753599439 扣扣:1590404240 叩叩:1306749621

Java窗口函數框架JDFrame

1、簡介 在上一節中已經介紹過 JDFrame,文章鏈接stream流太難用了看看JDFrame 沒看過的朋友可以先看看, 這次主要講講窗口函數相關API的使用 在各種數據庫mysql, hive、spark中都有非常好用的開窗函數使用, 但是java卻沒好用的J…

數據結構與算法學習筆記十---鏈隊列的表示和實現(C語言)

目錄 前言 1.什么是鏈隊 2.鏈隊的表示和實現 1.定義 2.初始化 3.銷毀 4.清空 5.空隊列 6.隊列長度 7.獲取隊頭 8.入隊 9.出隊 10.遍歷隊列 11.完整代碼 前言 本篇博客介紹鏈棧隊列的表示和實現。 1.什么是鏈隊 鏈隊是采用鏈式存儲結構實現的隊列。通常鏈隊使用單…

【知識拓展】大白話說清楚:IP地址、子網掩碼、網關、DNS等

前言 工作中常聽別人說的本地網絡是什么意思?同一網段又是什么意思?它倆有關系嗎? 在工作中內經常會遇到相關的網絡問題,涉及網絡通信中一些常見的詞匯,如IP地址、子網掩碼、網關和DNS等。具體一點:經常會…

申請免費的必應搜索API

申請免費的必應搜索API 文章目錄 申請免費的必應搜索API前言一、原理1.1 登錄1.2 進入1.3 獲取密鑰1.4 申請VISA信用卡1.5 創建必應自定義搜索資源 二、創建成功 前言 準備條件: 1、outlook郵箱 2、招商銀行全幣種VISA信用卡【建議之前就有一張招商銀行信用卡&…

【opencv】圖像拼接實驗

實驗環境:anaconda、jupyter notebook 實驗用到的包:opencv、matplotlib、numpy 注:opencv在3.4.2之后sift就不是免費的了 我用的是3.4.1.15版本 實驗使用到的圖片 一、sift函數獲取特征值 讀入圖片 book cv2.imread(book.png, cv2.IMRE…

【極簡】如何估算大模型inference所需的內存量

1字節8bit 16float2字節 模型后面的xxb的單位是字節。 1b 字節≈ 0.93G,這個是以8bit運行,4bit減半,16bit(float)加倍,32bit(double)炒雞加倍。 剩下的是小頭,需要參數計…

蘋果macOS無法給App麥克風授權解決辦法

好久沒有在電腦上錄制課程了,有些東西還是錄下來記憶深刻,卻意外發現MAC系統升級后無法授權給第三方的App使用攝像頭和麥克風,而錄屏軟件是需要開啟麥克風和攝像頭才能錄制屏幕上的操作和聲音,官方提示在第三方APP若有使用攝像頭和…

css的4種導入方式

熟悉CSS樣式4種的引用方式&#xff0c;分別為行內式、內嵌式、鏈入式和導入式。 行內式 <標簽名 style"屬性1:屬性值1;屬性2:屬性值2;屬性3:屬性值3;">內容</ 標簽名>style是標簽的屬性&#xff0c;實際上任何HTML標簽都擁有style屬性&#xff0c;用來…

pyqt QComboBox下拉列表框控件

pyqt QComboBox下拉列表框控件 QComboBox效果代碼 QComboBox QComboBox 是 PyQt&#xff08;中的一個控件&#xff0c;它允許用戶從下拉列表中選擇一個選項。這個控件在需要用戶從預定義選項中進行選擇時非常有用。 效果 代碼 import sys from PyQt5.QtWidgets import QAppl…

vite創建的項目使用rem適配

下面以創建vue3.0 項目為例&#xff1a; npm init vitelatest “名稱” 選擇vue &#xff08;選擇你所對應的語言&#xff09; 更具提示步驟執行 cd xxx npm i npm run dev 然后再項目中使用 rem 需要安裝插件 第一步安裝插件 npm i amfe-flexible npm i postcss-pxtorem 第二…

CS144 Checkpoint 4: interoperating in the world(2024)

分析網絡路徑和性能&#xff1a; mtr命令 mtr 輸出的詳細分析&#xff1a; mtr 162.105.253.58 命令用于結合 traceroute 和 ping 的功能&#xff0c;實時監測并分析從你的計算機到目標主機&#xff08;IP 地址 162.105.253.58&#xff0c;北京大學計算中心&#xff09;之間…

Nginx配置Referer防盜鏈

系列文章目錄 文章目錄 系列文章目錄前言 前言 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站&#xff0c;這篇文章男女通用&#xff0c;看懂了就去分享給你的碼吧。 HTTP Referer是Hea…

PBOOTCMS|URL靜態制作教程(已解答)

0、先解壓源碼文件&#xff0c;在覆蓋靜態文件&#xff0c;全部點是。 打開程序后臺登錄地址www.xxx.com(你的域名)/admin.php/Menu/index 打開程序后臺--系統菜單--菜單新增&#xff08;清理緩存后重新登錄賬號&#xff09; &#xff08;選擇父菜單&#xff0c;菜單名稱&#…

ROS2+TurtleBot3+Cartographer+Nav2實現slam建圖和導航

0 引言 入門機器人最常見的應用就是slam建圖和導航&#xff0c;本文將詳細介紹這一流程&#xff0c; 便于初學這快速上手。 首先對需要用到的軟件包就行簡單介紹。 turtlebot3: 是一個小型的&#xff0c;基于ros的移動機器人。 學習機器人的很多示例程序都是基于turtlebot3。 …