欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
keil封裝lib庫時,把函數(shù)指針做參數(shù)傳到lib庫的問題
[打印本頁]
作者:
pilotcrane
時間:
2024-10-18 10:00
標(biāo)題:
keil封裝lib庫時,把函數(shù)指針做參數(shù)傳到lib庫的問題
keil
封裝lib庫時,想把函數(shù)指針做參數(shù)傳到lib庫中,并在lib庫中賦給另一個函數(shù),使得在lib庫中通用使用。下面是寫的主要代碼,不知道有什么問題?或者正確應(yīng)該怎樣做,請高手指點(diǎn)一下。
lib庫中的函數(shù)接口和內(nèi)容:
uint8_t(*SPIRead)(uint8_t addr);
void(*SPIWrite)(uint8_t addr,uint8_t Data);
uint16_t(*GetTimems)(void);
void FHSS_Init(uint8_t(*SPI_Read)(uint8_t),void(*SPI_Write)(uint8_t,uint8_t), uint16_t(*Get_Time_ms)())
{
SPIRead=SPI_Read;
SPIWrite=SPI_Write;
GetTimems=Get_Time_ms;
}
應(yīng)用中調(diào)用代碼:
/***********************************
**名字:SPI_Read
**功能:SPI讀取
**入?yún)?地址
**出參:數(shù)據(jù)
************************************/
uint8_t SPI_Read(uint8_t addr)
{
SPI_3_Write_Byte(addr|0x80);
return(SPI_3_Read_Byte());
}
/***********************************
**名字:Write_SPI
**功能:SPI寫入
**入?yún)?地址,數(shù)據(jù)
**出參:無
************************************/
void SPI_Write(uint8_t addr,uint8_t Data)
{
SPI_3_Write_Byte(addr&0x7F);
SPI_3_Write_Byte(Data);
CSB_H();
}
uint16_t Get_Time_ms(void)
{
return TimesCount;
}
FHSS_Init(SPI_Read,SPI_Write, Get_Time_ms);
作者:
飛云居士
時間:
2024-10-18 15:16
為確保函數(shù)指針傳遞和使用沒有問題:
函數(shù)指針的聲明和使用: 在你的庫函數(shù) FHSS_Init 中,確保函數(shù)指針的聲明和定義在庫和應(yīng)用代碼中完全一致,特別是參數(shù)類型和返回類型必須匹配。
函數(shù)指針賦值: 在 FHSS_Init 中,賦值函數(shù)指針時,確保它們的類型正確匹配。如果庫函數(shù)定義和傳入的函數(shù)指針類型不匹配,可能會導(dǎo)致編譯或運(yùn)行時錯誤。
函數(shù)指針為空檢查: 為了安全性,在函數(shù)指針賦值時可以增加空指針檢查。避免傳入空指針引發(fā)不可預(yù)知的行為。
優(yōu)化: 如果庫函數(shù) FHSS_Init 需要長期調(diào)用 SPI 讀寫函數(shù),你可以通過函數(shù)指針進(jìn)行抽象,這樣就可以更方便地調(diào)用不同的 SPI 實(shí)現(xiàn)。
改進(jìn)后的 FHSS_Init 可能會如下所示:
c
復(fù)制代碼
void FHSS_Init(uint8_t(*SPI_Read)(uint8_t), void(*SPI_Write)(uint8_t, uint8_t), uint16_t(*Get_Time_ms)(void)) {
if (SPI_Read && SPI_Write && Get_Time_ms) { // 確保傳入函數(shù)指針有效
SPIRead = SPI_Read;
SPIWrite = SPI_Write;
GetTimems = Get_Time_ms;
} else {
// 處理空指針的情況
}
}
這種方式運(yùn)行時更加穩(wěn)定。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1