下午求助了几位年轻的C++村民:
我用C++和COM都出现了数据指针和函数指针不规范或不标准转换的警告.
在VC++下没问题,但在DSP的CCS3.1环境下就出现了警告.
我用所有C++或C的强制转换都未果,甚至用中间变量折腾一次也不行~~~
H文件:
typedef long HRESULT;
typedef interface IHotAsmArrayCom IHotAsmArrayCom;
typedef struct IHotAsmArrayComVtbl
{
void (*comASMArray)(void);//定义数组可执行汇编的函数指针
int (*comintASMArray)(void);//定义数组可执行汇编的函数指针
void (*comASMArrayInt)(int);//定义数组可执行汇编的函数指针
int (*comintASMArrayInt)(int);//定义数组可执行汇编的函数指针
}IHotAsmArrayComVtbl;
interface IHotAsmArrayCom
{
struct IHotAsmArrayComVtbl *lpVtbl;
};
extern void HotCOMDemo(void);
C文件:
void HotCOMDemo(void)
{
TI_IREG __ASMCodeArray[]=
{//下面的"数据"实际为汇编代码
__asm_push__(ASMCODE_REGS_AR6),
__asm_push__(ASMCODE_REGS_AR7),
__asm_frame__(-15),
__asm_char_SetACC__(0x88),
__asm_frame__(15),
__asm_pop__(ASMCODE_REGS_AR7),
__asm_pop__(ASMCODE_REGS_AR6),
__asm_return__(),
};
TI_IREG __intASMCodeArray[]=
{//下面的"数据"实际为汇编代码
__asm_push__(ASMCODE_REGS_AR6),
__asm_push__(ASMCODE_REGS_AR7),
__asm_frame__(-15),
__asm_char_SetACC__(0x88),
__asm_frame__(15),
__asm_pop__(ASMCODE_REGS_AR7),
__asm_pop__(ASMCODE_REGS_AR6),
__asm_return__(),
};
TI_IREG __ASMCodeArrayInt[]=
{//下面的"数据"实际为汇编代码
__asm_push__(ASMCODE_REGS_AR6),
__asm_push__(ASMCODE_REGS_AR7),
__asm_frame__(-15),
__asm_char_SetACC__(0x88),
__asm_frame__(15),
__asm_pop__(ASMCODE_REGS_AR7),
__asm_pop__(ASMCODE_REGS_AR6),
__asm_return__(),
};
TI_IREG __intASMCodeArrayInt[]=
{//下面的"数据"实际为汇编代码
__asm_push__(ASMCODE_REGS_AR6),
__asm_push__(ASMCODE_REGS_AR7),
__asm_frame__(-15),
__asm_char_SetACC__(0x88),
__asm_frame__(15),
__asm_pop__(ASMCODE_REGS_AR7),
__asm_pop__(ASMCODE_REGS_AR6),
__asm_return__(),
};
TI_IREG result, parameter = 0x1234;
//申请COM接口指针
IHotAsmArrayCom *AsmArrayCom = new (IHotAsmArrayCom*)[sizeof(IHotAsmArrayCom)];
//挂接汇编数组代码到COM接口
AsmArrayCom->lpVtbl->comASMArray = (ASMCodeArray_FPtr)__ASMCodeArray;
AsmArrayCom->lpVtbl->comintASMArray = (intASMCodeArray_FPtr)__intASMCodeArray;
AsmArrayCom->lpVtbl->comASMArrayInt = (ASMCodeArrayInt_FPtr)__ASMCodeArrayInt;
AsmArrayCom->lpVtbl->comintASMArrayInt = (intASMCodeArrayInt_FPtr)__intASMCodeArrayInt;
//通过COM访问汇编数组中的汇编代码
AsmArrayCom->lpVtbl->comASMArray();
result = AsmArrayCom->lpVtbl->comintASMArray();
AsmArrayCom->lpVtbl->comASMArrayInt(0x1234);
result = AsmArrayCom->lpVtbl->comintASMArrayInt(0x1234);
delete AsmArrayCom;
}
再一种:
H文件:
typedef void (*ASMCodeArray_FPtr)(void);//定义数组可执行汇编的函数指针
typedef int (*intASMCodeArray_FPtr)(void);//定义数组可执行汇编的函数指针
typedef void (*ASMCodeArrayInt_FPtr)(int);//定义数组可执行汇编的函数指针
typedef int (*intASMCodeArrayInt_FPtr)(int);//定义数组可执行汇编的函数指针
extern void HotASMDemo(void);
C文件:
void ASMObj::ArrayProcess(ASMCodeArray_FPtr process)
{
process();//
}
__TI_IREG ASMObj::ArrayFunction(intASMCodeArray_FPtr function)
{
return function();
}
void ASMObj::ArrayProcess(ASMCodeArrayInt_FPtr process, __TI_IREG arg)
{
process(arg);//
}
__TI_IREG ASMObj::ArrayFunction(intASMCodeArrayInt_FPtr function, __TI_IREG arg)
{
return function(arg);
}
void HotASMDemo(void)
{
TI_IREG __ASMCodeArray[]=
{//下面的"数据"实际为汇编代码
__asm_pushACC__(),
__asm_char_SetACC__(0x88),
__asm_popACC__(),
__asm_return__(),
};
TI_IREG __intASMCodeArray[]=
{//下面的"数据"实际为汇编代码
__asm_char_SetACC__(0x88),
__asm_return__(),
};
TI_IREG __ASMCodeArrayInt[]=
{//下面的"数据"实际为汇编代码
__asm_char_SetACC__(0x88),
__asm_return__(),
};
TI_IREG __intASMCodeArrayInt[]=
{//下面的"数据"实际为汇编代码
__asm_char_SetACC__(0x88),
__asm_return__(),
};
TI_IREG result, parameter = 0x1234;
ASM.ArrayProcess((ASMCodeArray_FPtr)(__ASMCodeArray));
result = ASM.ArrayFunction((intASMCodeArray_FPtr)__intASMCodeArray);
ASM.ArrayProcess((ASMCodeArrayInt_FPtr)__ASMCodeArrayInt, parameter);
result = ASM.ArrayFunction((intASMCodeArrayInt_FPtr)__intASMCodeArrayInt, parameter);
} |
|
相关推荐
电风扇改为低速控制
如何选择实时操作系统
日本巨头撤退:松下将把欧美电视销售业务转让给创维
两级微风档的三速电风扇电路
流水线和Data abort的问题
阿斯麦将极紫外光刻机光源功率提升至1000瓦,助力提升芯片良率、降低制造成本
大嘴业话:互联网公司做机意欲何为
阿斯麦ASML公布EUV光源技术突破,2030年芯片产能或提升50%
超越工程本身:雅培工程师的核心技能如何影响生产力与职业发展
超高性价比的arm7开发板
群联预警:2026 NAND闪存短缺将冲击消费电子产业
嵌入式终端中MP3功能的研究与实现
哪位大哥有ftpdlib.c!!!
嵌入式以太网pcb设计中的几点注意事项
嵌入式系统中的MODEM
嵌入式语音识别处理ISD-SR3000的特性及应用
人形机器人开发新手入门完全指南
电风扇调速电路(350mm钻石)
用硬件仿真器实现全面的验证
单速电风扇用8W镇流器改为三速
100GbE时代的网络处理器:BCM88030 XGSCore
mcu 高人!!!!
视觉:嵌入式的下一个方向
破解电子系统散热难题:如何在热浪中保持性能稳定
三星晶圆代工本季度产能利用率飙升至 80%
单速电风扇用40W镇流器改为双速
微型投影仪:视频分享时代的宠儿
仅1纳米、功耗最低!我国科研团队取得下一代芯片关键进展
bsp具体怎么做啊
智驾仿真国产化提速:摩尔线程与五一视界共建全栈国产化的物理AI仿真体系