Over here我问过关于将ASM文件翻译成C语言的问题,从回应来看似乎没有合理的方法可以做到这一点。很好。因此,其中一个回复建议我只是按原样使用这些函数,并使用它来完成。听起来不错。
但是怎么做呢?
天啊,我已经试过我能想到的所有方法了!我正在使用微芯片牌单片机(PIC18F4480)和微芯片牌集成开发环境(MPLAB )和ASM文件是微芯公司创作的…所以你会认为我会找到一些方法来利用它们!到目前为止,根本没有任何运气。
我对ASM (汇编)一无所知。我用C++编写代码,坦率地说,这一点不会改变。必须有一种方法来访问Microchip ASM文件中的函数,而不需要用一种新语言重写所有代码。
如果有人想看一看,ASM文件和应用笔记是here。
发布于 2009-09-04 08:19:06
看看PIDInt.asm,从C/C++调用函数应该是相当简单的。首先,为变量定义中列出的所有内容声明外部变量:
extern unsigned char error0, error1; /* etc */然后,为所有具有"Function:“注释的对象声明外部函数,不接受任何参数,也不返回任何结果:
extern void Proportional(); // extern "C" for C++要调用其中一个变量,您需要填充输入变量,调用函数,然后读取输出变量。
发布于 2009-09-04 08:17:51
我希望您需要以某种方式从汇编代码构建一个对象(.o)文件,然后将您的C++文件与该对象文件链接起来。您可能需要将这些函数声明为extern "C"才能从C++调用它们。
不确定这里的细节,在C++和汇编之间的调用约定可能会有问题,特别是对于像PIC这样的微控制器。
您是否真的为微控制器使用了完整的C++功能集,即对象、虚拟函数、重载等?那是..。不错,但我认为大多数PIC开发仍然是纯C语言(当然还有汇编语言)。
发布于 2009-09-04 08:31:28
通常的方法是使用具有汇编程序和C/C++编译器的构建环境和工具。编译器(和汇编器)获取源文件并生成中间目标文件格式。在Microsoft Windows上,使用Microsoft Tools时,这些文件将是.obj文件。
然后使用链接器将.obj文件链接到单个应用程序二进制文件中,这些文件可能由多种语言生成- fortran、cobol、c++、c、objective-c、汇编等。
目标文件基本上是导出符号的集合,标记小的字节块和未解析的符号,标记在链接期间需要修补的字节块,以指向不同的目标文件中的某些内容。
现在,在我经历过的平台上,通常的问题是,c++编译器并没有考虑到任何类型的跨语言二进制兼容性。另一方面,C编译器则是。因此,c++编译器会生成高度损坏的符号,这些符号将有关参数和返回类型的各种信息合并到符号名称中。这种机制使得操作符重载成为可能。
不管怎么说,关键是,
因此,创建一个头文件来保存pid代码的函数声明,并将如下内容放入其中:
外部"C“空PidMain(空);
现在,#将这个头文件包含在您的c++程序中,并确保汇编器生成的目标文件包含在您的环境链接步骤中,您应该是黄金级的。
这可能涉及到某种调用约定。有些环境对于推入堆栈的顺序和/或谁负责堆栈清理有不同的标准。大多数ms windows工具集至少支持__pascal和__cdecl调用约定,因此解密结果如下所示
外部"C“空__pascal PidMain(空);
我不知道在您的特定环境中是否有多个调用约定。所以我不知道这对我有多大帮助。我想祝你好运吧。
https://stackoverflow.com/questions/1377852
复制相似问题