[英]MpLab, ASM, C, Building To accommodate both
我有一个用于PIC24芯片的大型ASM项目。 (特定的芯片是PIC24FJ256GB210)
我现在在C中还有其他一些例程。
我想将这些合并到我的项目中。
C例程位于5个左右文件的项目中,其中一个文件包含int main(void)
语句作为起点。 这是为了测试它们并赋予我们它们起作用的信心。 现在,我们准备移动该代码并将其合并到更大的现有系统中。
汇编语言的内容以__reset:
指令开头。
如何安排项目和构建选项,以便接下来的三件事?
__reset
指令开始 __reset
和int main(void)
至少相互配合) 有趣的是,Microchip的用户论坛和示例代码部分似乎错过了这个主意(或者,更可能的是,我还没有弄清楚如何找到它们)。
我认为这个问题已经问了很多,我希望我不要重复前面的问题,但是我在这里也没有在MicroChip的网站上看到它。 欢迎链接到有关此主题的有用网站。
如果我只需要学习如何更好地搜索该站点和其他站点,那么它本身就是一个有用且可行的答案。 再次,希望我不要问一个重复的问题。
我建议您阅读DS51284H(“用于PIC24 MCU和dsPIC®DSC的MPLAB®C编译器用户指南”)( PDF )。
特别是请参阅第4.4节“ 启动和初始化”
“ libpic30.a存档/库中包含两个C运行时启动模块。这两个启动模块的入口都是__reset。链接程序脚本在程序存储器的位置0处构造了GOTO __reset指令,该指令在设备复位时转移控制权。
....
5.调用函数main时不带参数。”
您的__reset
标签和CRT(C运行时)中的标签似乎冲突。 如果您有CRT的来源,则可以通过将CRT中的__reset
标签重命名为其他名称来更改它,以便始终先调用您自己的__reset
。
另一点是,听起来您想使用一个独立程序并将其用作您自己程序中的库。 由于独立程序通常被设计为执行一个或多个特定任务,并在该任务完成后退出,因此您可能需要对C代码进行一些重构以使其更加库化(例如摆脱main()
函数和也许用某种init()
函数代替它)。
以及第4.11节“ 功能调用公约” 。
“前八个工作寄存器(W0-W7)用于功能参数。参数以从左到右的顺序分配给寄存器,并且将参数分配给适当对齐的第一个可用寄存器。
....
对于8位或16位标量,以W0返回函数返回值;对于32位标量,以W1:W0返回;对于64位标量,返回W3:W2:W1:W0。
迈克尔给了你一个很好的答案。 我唯一要补充的是,您应该使用C语言创建项目并削减其中的汇编函数。
这样,您可以保留快速且功能强大的asm代码,并可以用C维护项目,这非常容易。
将C代码转换为汇编并要维护大量的汇编代码不符合您的利益,反之亦然。
阅读文档后,您会发现在C中使用汇编函数并不难,但是要开始使用,可以看一下:
C:\\ ... bla bla ... \\ Microchip \\ MPLAB C30 \\ src \\ dsp \\ include \\ dsp.h
在C中包含用于此文件夹中实际汇编函数的函数声明:
C:\\ ... bla bla ... \\ Microchip \\ MPLAB C30 \\ src \\ dsp \\ asm
您可以从函数_VectorAdd开始:矢量加法,文件“ vadd.s”
注意,组件功能_VectorAdd在头文件中定义为VectorAdd函数 。
该示例文件适用于DSPIC中的dsp引擎,而PIC24则不提供。 但是提取该原理仍然足够有说服力。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.