我无法从 PIC18F 设备迁移到 dsPIC30F(尤其是 4013)。我正在使用带有 ASM30 的 MPLAB 作为编译器。因此,正如主题所暗示的那样,问题是外部子例程 - 我的意思是在不同的源文件中定义。在 18F 中,它既好又简单:假设我在源文件“init.asm”中有一个名为“initiateData”的过程,我想从“main.asm”中调用它——没有比这更容易的了:只需放置一个
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 中制作多源项目的信息,所以我谦虚地寻求任何帮助。
问候,
饮酒者