我有一个很大的和实质性的项目为一个PIC24芯片。(具体芯片为PIC24FJ256GB210)
我现在在C语言中有一些其他的程序。
我想把这些融入到我的项目中。
C例程位于5个左右文件的项目中,其中一个文件包含int main(void)
语句作为起点。这是为了测试他们,给我们信心,他们的工作。我们现在准备移动代码并将其合并到更大的现有系统中。
汇编语言从__reset:
指令开始。
我如何安排项目和构建选项,以便我可以做以下三件事?
继续从我的__reset
指令开始
(或者至少确保我现有的__reset
和int main(void)
至少互相配合)
从ASM代码调用他的例程
使用C代码设置的相同数据缓冲区
有趣的是,Microchip的用户论坛和示例代码部分似乎忽略了这个想法(或者,更可能的是,我还没有找到它们)。
我想这个问题已经被问了很多,我希望我没有重复之前的问题,但我在这里和微芯片的网站上都没有看到。欢迎链接到有关此主题的有用网站。
如果我只是需要学习如何更好地搜索这个和其他网站,这将是一个有用和可行的答案本身。再一次,希望我没有问重复的问题。
最佳答案
我建议您阅读DS51284H(“MPLAB®C COMPILER FOR PIC24 MCU AND dsPIC®DSCs用户指南”)(PDF)。
具体见第4.4节启动和初始化
“libpic30.a存档/库中包含两个C运行时启动模块。这个
两个启动模块的入口点都是复位。链接器脚本构造一个GOTO
__在程序存储器中的位置0的复位指令,它在
设备复位。
....
5个。调用函数main时没有参数。“
您的__reset
标签和CRT(C运行时)中的标签可能会出现冲突。如果您有CRT的源代码,您可以将CRT中的__reset
标签重命名为其他标签,这样您自己的__reset
总是首先被调用。
另一点是,听起来你想把一个独立的程序作为一个库从你自己的程序中使用。由于独立的程序通常被设计为执行一个或多个特定任务,一旦任务完成后退出,您可能需要重新调整C代码以使其具有更多的库ISH(例如,去掉main()
函数,或者用某种init()
函数替换它)。
以及第4.11节函数调用约定。
“前八个工作寄存器(W0-W7)用于功能参数。参数
按从左到右的顺序分配给寄存器,并为第一个寄存器分配一个参数
适当对齐的可用寄存器。
....
对于8位或16位标量,函数返回值以W0形式返回;对于32位标量,函数返回值以W1:W0形式返回
标量,64位标量为W3:W2:W1:W0。”
关于c - MpLab,ASM,C,建筑物,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15367538/