函数及变量跨模块调用
来源:互联网 发布:广州本科网络教育 编辑:程序博客网 时间:2024/06/07 02:38
有时候要获取一个关键接口时,本地没有就需要各种调用了,虽然方法有点暴力,但没辙时还是很有效果的,稍作总结一、C调用C++common/libs/audio/audio_hw.c //再audio hal层调用C++的函数typedef void* FMPcmHandler;extern FMPcmHandler fm_pcm_open(int samplerate,int channels,int bytes,int required_channel);FMPcmHandler fm_pcm_open_l(struct pcm_config fm_record_config,int bytes,int required_channel){return fm_pcm_open(fm_record_config.rate,fm_record_config.channels,bytes,required_channel);}common/libs/audio/Android.mk //把函数定义的源文件和库编译过来LOCAL_C_INCLUDES += \device/sprd/partner/trout/fmhalLOCAL_SHARED_LIBRARIES := \libengclient libvbeffect libvbpga libFMHalSource partner/trout/fmhal/FMHalSource.h //要调用函数的声明和定义extern "C"{ typedef void * FMPcmHandler; FMPcmHandler fm_pcm_open(int samplerate,int channels,int bytes,int required_channel);}partner/trout/fmhal/FMHalSource.cppFMPcmHandler fm_pcm_open(int samplerate,int channels,int bytes,int required_channel){ //realize this function // TO DO ...}二、C++调用C:没找到跨模块的合适的函数,这里是同模块内C++调用C;个人觉得如果是跨模块的话就把要用到的库share过来就行再要用的模块内编译进这个C函数(这里在同一目录,FMHalSource.cpp调用tinyalsa_util.c)device/sprd/partner/trout/fmhal/Android.mkLOCAL_SRC_FILES := FMHalSource.cpp RingBuffer.cpp tinyalsa_util.c定义:device/sprd/partner/trout/fmhal/tinyalsa_util.cint get_snd_card_number(const char *card_name){ int i = 0; char cur_name[64] = {0}; //loop search card number for (i = 0; i < 32; i++) { get_snd_card_name(i, &cur_name[0]); if (strcmp(cur_name, card_name) == 0) { ALOGI("Search Completed, cur_name is %s, card_num=%d", cur_name, i); return i; } } ALOGE("There is no one found."); return -1;}调用:device/sprd/partner/trout/fmhal/FMHalSource.cppextern "C"{ #define FM_CARD_NAME "general-i2s" int get_snd_card_number(const char *card_name);}3、kernel里调用3.1 普通的全局变量使用全局变量定义:kernel\drivers\net\wireless\bcmdhd\Dhd_common.c bool ap_fw_loaded = FALSE;其他地方调用:kernel\drivers\net\wireless\bcmdhd\Wl_android.cextern bool ap_fw_loaded;kernel/driver/mmc/core/core.h //这个头文件的声明貌似可以没有void mmc_power_off(struct mmc_host *host);//这个头文件的声明貌似可以没有全局函数的定义:kernel/driver/mmc/core/core.cvoid mmc_power_off(struct mmc_host *host){ //realize this function // TO DO ...}其他地方调用: kernel\drivers\mmc\host\Sc8830.cextern void mmc_power_off(struct mmc_host* mmc);3.2这是在模块内部可以这样,直接全局就可以了;当kernel里要调用模块内部就无法extern过来了,或者模块之间好像也无法extern了;那么可以用EXPORT_SYMBOL变量的定义:kernel\arch\arm\mach-sc\Dhd_adapter.cstruct mmc_host *gMmc;EXPORT_SYMBOL_GPL(gMmc); 调用:kernel\drivers\net\wireless\bcmdhd\Bcmsdh_sdmmc_linux.cextern struct mmc_host *gMmc;函数的定义:kernel\drivers\mmc\host\Sc8830.cint sdhci_device_attach(int on){struct mmc_host *mmc = NULL;if(sdhci_host_g && (sdhci_host_g->mmc)){mmc = sdhci_host_g->mmc;if(mmc->card){sdhci_host_g->dev_attached = on;if(!on){mmc_power_off(mmc);}else{mmc_power_up(mmc);}}else{/* no devices */sdhci_host_g->dev_attached = 0;return -1;}return 0;}return 0;}EXPORT_SYMBOL_GPL(sdhci_device_attach);函数的调用kernel\drivers\net\wireless\bcmdhd\Wl_android.cextern int sdhci_device_attach(int on);
阅读全文
0 0
- 函数及变量跨模块调用
- 父子对话框 变量及函数的调用
- 跨源文件函数/变量调用
- Linux 驱动模块及模块之前的通信(模块函数的相互调用)
- Linux系统内核模块函数调用及命名空间
- Linux系统内核模块函数调用及命名空间
- Linux系统内核模块函数调用及命名空间
- Linux内核模块函数调用及命名空间(1)
- Linux内核模块函数调用及命名空间(2)
- Linux内核模块函数调用及命名空间(3)
- C/C++读取Lua中的变量及调用Lua函数
- C/C++读取Lua中的变量及调用Lua函数
- php函数变量调用
- 变量及函数
- linux 内核模块函数调用
- phthon调用模块中的函数
- VC多线程中全局函数如何调用对话框类成员变量及成员函数
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
- 增加Tomcat连接数
- jar包、可执行jar包、classpath
- linux磁盘管理
- 导航栏添加子标题
- Android科大讯飞语音合成
- 函数及变量跨模块调用
- pygame.error: Unable to open file 'pickup.wav'
- 2017 谷歌 I/O大会
- NB算法
- 禁调滑动的recyclerview
- [知识汇总] Qt、Qt SDK以及Qt Creator的区别
- vue如何在sublime text 中变成彩色
- final
- 利用ScrollView实现图片缩放