MpLab、ASM、C、建筑,以容纳两者
我有一个大型和实质性的ASM项目的PIC24芯片。(具体芯片为PIC24FJ256GB210) 我现在有一些C语言的其他例程 我想把这些纳入我的项目 C例程位于大约5个文件的项目中,其中一个包含MpLab、ASM、C、建筑,以容纳两者,c,assembly,integration,pic24,C,Assembly,Integration,Pic24,我有一个大型和实质性的ASM项目的PIC24芯片。(具体芯片为PIC24FJ256GB210) 我现在有一些C语言的其他例程 我想把这些纳入我的项目 C例程位于大约5个文件的项目中,其中一个包含intmain(void)语句作为起点。这是为了测试它们,让我们相信它们是有效的。我们现在准备移动该代码并将其合并到更大的现有系统中 汇编语言内容以\u reset:指令开始 我如何安排项目和构建选项,以便我可以做下面三件事 继续从我的\u reset指令开始 (或者至少确保我现有的\uu重置和int
intmain(void)
语句作为起点。这是为了测试它们,让我们相信它们是有效的。我们现在准备移动该代码并将其合并到更大的现有系统中
汇编语言内容以\u reset:
指令开始
我如何安排项目和构建选项,以便我可以做下面三件事
- 继续从我的
指令开始\u reset
- (或者至少确保我现有的
和\uu重置
至少相互配合)int main(void)
- 从ASM代码调用他的例程
- 使用与C代码设置相同的数据缓冲区
如果我只需要学习如何更好地搜索这个和其他网站,这将是一个有用和可行的答案本身。同样,希望我没有问重复的问题。我建议您阅读DS51284H(“适用于PIC24 MCU和dsPIC®DSCs的MPLAB®C编译器用户指南”)() 具体见第4.4节启动和初始化 “libpic30.a存档/库中包含两个C运行时启动模块 两个启动模块的入口点都是重置。链接器脚本构造一个GOTO __程序存储器中位置0处的复位指令,该指令在 设备重置。
..
5.调用函数main时没有参数。“ 您的
\u重置
标签与CRT(C运行时)中的标签似乎冲突。如果您有CRT的源代码,您可以通过将CRT中的\uuuu reset
标签重命名为其他名称来更改它,以便始终首先调用您自己的\uu reset
。另一点是,听起来您希望使用一个独立的程序,并从您自己的程序中将其用作库。由于独立程序通常被设计为执行一个或多个特定任务,并在该任务完成后退出,因此您可能需要对C代码进行一些重构,使其更像库(比如去掉
main()
函数,或者用某种init()
函数替换它)
和第4.11节函数调用约定 前八个工作寄存器(W0-W7)用于函数参数。参数 按从左到右的顺序分配给寄存器,并为第一个寄存器分配一个参数 适当对齐的可用寄存器。
..
对于8位或16位标量,函数返回值在W0中返回;对于32位标量,函数返回值在W1:W0中返回 标量,而W3:W2:W1:W0表示64位标量。”
迈克尔给了你一个很好的回答。我想补充的唯一一件事是,您应该在C中创建项目,并在其中剪切汇编函数 通过这种方式,您可以保持快速且功能强大的asm代码,并且可以用C语言维护项目,这要容易得多 将C代码转换为汇编代码并将大量汇编代码转换为mantain并不符合您的兴趣,反之亦然 阅读文档后,您将看到在C中使用汇编函数并不难,但要开始使用,您可以看看以下内容: C:\…布拉布拉\Microchip\MPLAB C30\src\dsp\include\dsp.h 包含此文件夹中实际程序集函数的C函数声明: C:\…布拉布拉\微芯片\MPLAB C30\src\dsp\asm 您可以从函数_VectorAdd:Vector Addition开始,文件“vadd.s” 请注意,汇编函数\u vectorad在头文件中定义为vectorad
此示例文件适用于DSPIC中的dsp引擎,这是PIC24没有的功能。但它仍然具有足够的说明性,可以提取原理 谢谢。这是指向正确的方向。您能否编辑您的回复以展开首字母缩略词
CRT
?我只是在PDF手册中搜索了一下,你发现(谢谢)它的首字母缩略词是“CRT”,但没有找到一个对我来说显而易见的解释。如果我能解决这个问题,我可以重新编写C程序,让intmain(void)
成为一个“无”例程(即{}
或其他什么),然后将其他C函数用作“库”吗?(我认为它们通常被命名为)CRT==C运行时。在答案中添加了澄清。谢谢。在搜索时,无法确定如何在何时何地完成。我能写一个没有函数的C程序吗?intmain(void)
?我认为这是一个要求;应用程序通常需要某种类型的main()
函数,但库不一定需要。虽然我不熟悉如何使用Microchip的工具构建库,但我链接到的PDF可能包含一些关于该主题的信息。稍后再回答其他问题,不要让intmain(void)
返回,因为第4.5节也包含以下内容:5。如果main返回,处理器将复位。