目錄
一、概述/目的
二、通過串口發送函數對比
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提高代碼的可讀性和安全性,通過限制變量和指針的修改來減少意外錯誤的可能性。