在dsPIC30F系列中定义外部子程序

时间:2013-09-07 05:37:17

标签: assembly call extern pic

我无法从PIC18F器件迁移到dsPIC30F(特别是4013)。我正在使用MPLAB和ASM30作为编译器。因此,主题建议问题是外部子程序 - 我的意思是在不同的源文件中定义。在18F中,它非常简单:假设我在源文件“init.asm”中有一个名为“initiateData”的过程,我想从“main.asm”调用它 - 没有比那更容易了:只需放置一个< / p>

EXTERN initiateData

在main.asm和

GLOBAL initiateData 
在init.asm中

。然后从main:

调用它
call initiateData

然而对于dsPIC30,我尝试这样的东西(init.s)

.global initiateData

.text

initiateData:
MOV #0x0400, W2 
return
.end

和(main.s):

.equ __30F4013, 1
.include "P30F4013.inc"
.extern initiateData
.global __reset

.text
__reset:

call initiateData
.end

这段代码(虽然实际上更复杂 - 我刚刚发布了我认为重要的摘要)正确编译和链接(但是有一个恼人的警告:main.s:0:警告:文件末尾没有结束一行;插入换行符 - 如何解决?)。这里的问题是,在调试模式下,跟踪器(噢 - 我使用PICkit2进行调试)按照原样输入inititateData,但是在mov命令中出现错误并且程序计数器跳转到位置

0100  DA4000  ReservedBR
0102  FE0000  reset

导致另一个__reset调用。 我真的不知道我做错了什么 - 网上关于如何在asm30中创建一个多源项目的内容并不多,所以我谦虚地请求任何帮助。

此致

饮酒

0 个答案:

没有答案