我有一个问题。我有一个评估工具包和一个 starter_kit 程序,它与 WINDOWS xp 下 IDE 的工具套件插件配合得很好。IDE sous Ubuntu 12.0.4 的相同工具套件插件可以工作,但不能做同样的事情事情。奇怪没有?仅供参考,我的工具是:
- 单片机:PIC24HJ128GP504
- 开发板:用于 PIC24H MCU 的 MPLAB 入门工具包
- 用于加载/调试 SKDE PIC24H 传感器的 USB 连接
- IDE:MPLABX IDE v1.85
- C编译器:XC16 V1.11
- 源代码:用于 pic24 H 传感器演示的入门套件
在 UBUNTU 中,我使用 XC16 C 编译器在 MPLAB X ide 中编译和链接该源代码,没有任何错误,然后对设备进行编程,但随后 Microchip 徽标(启动练习)出现在 OLED 上,代码的其他部分没有已执行(例如主屏幕)。OLED 只是闪烁并在闪烁时重复显示 Microchip 徽标。在我看来,它进入了RESET LOOP。
奇怪的是,当我将操作系统从 ubuntu 更改为 windows xp 并使用安装在 windows xp 上的相同 IDE 和相同的 C 编译器并对设备进行编程时,它运行良好并且不会进入这个看似重置的循环。它显示Microchip 徽标(启动练习)并执行程序的其余部分(主屏幕)。而且我不知道出了什么问题。我使用此步骤调试此问题但没有成功,我想知道如果您是我的情况,您会怎么做,以及您是否可以帮助我找到我的问题。
- 比较映射文件(链接器输出):这两个文件几乎相同,只是winXP的映射具有resetPRI功能,但ubuntu的使用reset(在我看来这是一个内存部分,而不是一个函数)。你可以看到地图文件的共同部分和下面的差异。
External Symbols in Program Memory (by address):
0x000200 __resetPRI
Memory Configuration:
Name Origin Length Attributes
data 0x000800 0x002000 a !xr
reset 0x000000 0x000004
program 0x000200 0x015600
LOAD libp24HJ128GP504-elf.a
.reset 0x000000 0x4
0x000000 0x2 SHORT 0x200 ABSOLUTE (__reset)
0x000001 0x2 SHORT 0x4
0x000002 0x2 SHORT 0x0 ((ABSOLUTE (__reset) >> 0x10) & 0x7f)
0x000003 0x2 SHORT 0x0
.text 0x000200 0xf06
libpic30-elf.a(crt0_standard.o)
0x000200 __reset (difference:from ubuntu map file)
0x000200 __resetPRI (difference:from winxp map file)
build/default/production/_ext/1360937237/**Main.o**
_0x40c515645214dac2 (difference:from ubuntu map file)
_0213CF005214c228 (difference:from winxp map file)
0x2600 0x1c0
_0x40c515645214dac2 (difference:from ubuntu map file)
_0213CF005214c228 (difference:from winxp map file)
0x2600 0x1c0 build/default/production/_ext/1360937237 /Accelerometer.o (ONE function in the program )
0x2600 _BufferA
_0x40c515c05214dac2 (difference:from ubuntu map file)
_0213D1205214c228 (difference:from winxp map file)
任何想法我应该在哪里寻找问题将不胜感激。