久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 945|回復(fù): 1
收起左側(cè)

keil封裝lib庫(kù)時(shí),把函數(shù)指針做參數(shù)傳到lib庫(kù)的問題

[復(fù)制鏈接]
ID:726109 發(fā)表于 2024-10-18 10:00 | 顯示全部樓層 |閱讀模式
keil封裝lib庫(kù)時(shí),想把函數(shù)指針做參數(shù)傳到lib庫(kù)中,并在lib庫(kù)中賦給另一個(gè)函數(shù),使得在lib庫(kù)中通用使用。下面是寫的主要代碼,不知道有什么問題?或者正確應(yīng)該怎樣做,請(qǐng)高手指點(diǎn)一下。

lib庫(kù)中的函數(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);
回復(fù)

使用道具 舉報(bào)

ID:404160 發(fā)表于 2024-10-18 15:16 | 顯示全部樓層
為確保函數(shù)指針傳遞和使用沒有問題:

函數(shù)指針的聲明和使用: 在你的庫(kù)函數(shù) FHSS_Init 中,確保函數(shù)指針的聲明和定義在庫(kù)和應(yīng)用代碼中完全一致,特別是參數(shù)類型和返回類型必須匹配。

函數(shù)指針賦值: 在 FHSS_Init 中,賦值函數(shù)指針時(shí),確保它們的類型正確匹配。如果庫(kù)函數(shù)定義和傳入的函數(shù)指針類型不匹配,可能會(huì)導(dǎo)致編譯或運(yùn)行時(shí)錯(cuò)誤。

函數(shù)指針為空檢查: 為了安全性,在函數(shù)指針賦值時(shí)可以增加空指針檢查。避免傳入空指針引發(fā)不可預(yù)知的行為。

優(yōu)化: 如果庫(kù)函數(shù) FHSS_Init 需要長(zhǎng)期調(diào)用 SPI 讀寫函數(shù),你可以通過函數(shù)指針進(jìn)行抽象,這樣就可以更方便地調(diào)用不同的 SPI 實(shí)現(xiàn)。

改進(jìn)后的 FHSS_Init 可能會(huì)如下所示:

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)行時(shí)更加穩(wěn)定。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩免费一二三区 | 特黄特色大片免费视频观看 | 精品久久久久久久 | 久久亚洲精品久久国产一区二区 | 免费亚洲视频 | 欧美一区二区在线播放 | 国产馆| 精品一区二区三区视频在线观看 | 亚洲精品中文字幕av | 黄色一级大片在线免费看产 | 综合久久久| 久久91av| www.精品一区| 久久最新精品 | 在线观看亚洲精品视频 | 精品国产一区二区三区久久久四川 | 国产精品日韩欧美一区二区三区 | 国产99热精品| 蜜桃视频成人 | 狠狠干在线 | 国产视频一区在线观看 | 日韩中文不卡 | 一区二区免费看 | 99精品热视频| 中文字幕电影在线观看 | 欧美在线视频一区 | 亚洲免费三区 | 伊人中文字幕 | 亚洲天堂精品一区 | 亚洲一区二区免费电影 | 久草在线青青草 | 日本成人综合 | 91中文字幕| 一区二区av在线 | 午夜精品久久久久久久久久久久 | 欧美一区二区三区在线视频 | 影音先锋成人资源 | 一区二区精品视频 | 精品国产欧美在线 | 草草草影院 | 伊人久久大香线 |