0

我无法从 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 中制作多源项目的信息,所以我谦虚地寻求任何帮助。

问候,

饮酒者

4

0 回答 0