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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 789|回復: 1
打印 上一主題 下一主題
收起左側

keil封裝lib庫時,把函數指針做參數傳到lib庫的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:726109 發表于 2024-10-18 10:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
keil封裝lib庫時,想把函數指針做參數傳到lib庫中,并在lib庫中賦給另一個函數,使得在lib庫中通用使用。下面是寫的主要代碼,不知道有什么問題?或者正確應該怎樣做,請高手指點一下。

lib庫中的函數接口和內容:
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;
}

應用中調用代碼:
/***********************************
**名字:SPI_Read
**功能:SPI讀取
**入參:地址
**出參:數據
************************************/
uint8_t SPI_Read(uint8_t addr)
{
SPI_3_Write_Byte(addr|0x80);
return(SPI_3_Read_Byte());
}

/***********************************
**名字:Write_SPI
**功能:SPI寫入
**入參:地址,數據
**出參:無
************************************/
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);
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:404160 發表于 2024-10-18 15:16 | 只看該作者
為確保函數指針傳遞和使用沒有問題:

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

函數指針賦值: 在 FHSS_Init 中,賦值函數指針時,確保它們的類型正確匹配。如果庫函數定義和傳入的函數指針類型不匹配,可能會導致編譯或運行時錯誤。

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

優化: 如果庫函數 FHSS_Init 需要長期調用 SPI 讀寫函數,你可以通過函數指針進行抽象,這樣就可以更方便地調用不同的 SPI 實現。

改進后的 FHSS_Init 可能會如下所示:

c
復制代碼
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) {  // 確保傳入函數指針有效
        SPIRead = SPI_Read;
        SPIWrite = SPI_Write;
        GetTimems = Get_Time_ms;
    } else {
        // 處理空指針的情況
    }
}
這種方式運行時更加穩定。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区三区精品 | 日韩欧美国产成人一区二区 | 亚洲欧美日韩中文在线 | 国产玖玖 | 国产精品免费看 | 日韩视频精品 | 国产精品成人在线播放 | 日韩成人av在线播放 | 国产高清精品一区二区三区 | 日本一区二区三区在线观看 | 国产乱码精品一区二区三区五月婷 | 国产91一区| 中文字幕亚洲一区二区va在线 | www.youjizz.com日韩 | 欧美黄色性生活视频 | 国产精品视频999 | 成人在线免费视频观看 | 国产三级| 天天玩夜夜操 | 国产福利视频在线观看 | 久久久久久久一区 | 精品国产乱码久久久久久图片 | 日韩一级 | 在线国产视频 | 久久99精品久久久久蜜桃tv | 国产午夜精品一区二区三区四区 | 亚洲综合色网站 | 中文字幕日韩欧美 | 亚洲一区二区三区四区视频 | 免费成人在线网站 | 欧美日韩在线不卡 | 国产综合久久 | 色视频在线播放 | 国产精品久久国产精品 | 日韩av免费在线电影 | 日韩精品成人 | 国产精品视频一区二区三区 | 伊人性伊人情综合网 | 久久久久久久久淑女av国产精品 | www.狠狠干| 一级片免费在线观看 |