C 相同的源代码,相同的编译工具,ubunto与windowsxp,不同的行为,为什么?几乎相同的地图文件

C 相同的源代码,相同的编译工具,ubunto与windowsxp,不同的行为,为什么?几乎相同的地图文件,c,linux,windows,map-files,C,Linux,Windows,Map Files,我有一个问题。我有一个评估工具包和一个初学者工具包程序,它与WINDOWS xp下IDE的toolsuites插件配合得很好。IDE的toolsuites插件和Ubuntu12.0.4的toolsuites插件一样可以工作,但不能做同样的事情。是吗?仅供参考,我的工具包括: MCU:PIC24HJ128GP504 电路板:用于PIC24H MCU的MPLAB启动器套件 用于加载/调试SKDE PIC24H传感器的USB连接 IDE:MPLABX IDE v1.85 C编译器:XC16 V1.1

我有一个问题。我有一个评估工具包和一个初学者工具包程序,它与WINDOWS xp下IDE的toolsuites插件配合得很好。IDE的toolsuites插件和Ubuntu12.0.4的toolsuites插件一样可以工作,但不能做同样的事情。是吗?仅供参考,我的工具包括:

  • MCU:PIC24HJ128GP504
  • 电路板:用于PIC24H MCU的MPLAB启动器套件
  • 用于加载/调试SKDE PIC24H传感器的USB连接
  • IDE:MPLABX IDE v1.85
  • C编译器:XC16 V1.11
  • 源代码:用于pic24小时传感器演示的初学者工具包
在UBUNTU中,我使用XC16 C编译器编译并链接MPLAB X ide中的源代码,没有任何错误,然后对设备进行编程,但在OLED上出现微芯片徽标(启动练习)后,代码的其他部分不会执行( 主屏幕(例如)。OLED在闪烁时只会闪烁并重复显示微芯片徽标。在我看来,它进入了一个重置循环

奇怪的是,当我将操作系统从ubuntu改为windows xp,并使用安装在windows xp上的相同IDE和相同的C编译器对设备进行编程时,它工作得非常完美,不会进入这个看似重置的循环。它会显示微芯片徽标(启动练习)并执行程序的其余部分(主屏幕)。 我不知道怎么了。 我用这个步骤调试这个问题,但没有成功,我想知道如果你是我的情况下,你会怎么做,如果你能帮我找到我的问题

  • 比较映射文件(链接器输出): 这两个文件几乎相同,只是winXP的map有一个resetPRI函数,而ubuntu的map使用了reset(在我看来,这是一个内存部分,不是函数)。你可以看到map文件的共同部分和下面的区别
程序存储器中的外部符号(按地址):


如果您知道我应该在哪里查找问题,我将不胜感激

您确定两个系统上的编译器/库版本完全相同吗?实际生成的代码是否不同?编译器/库是相同的。您所说的实际代码是什么意思?地图文件的区别是上面的代码(我的评论)我的意思是实际的二进制文件与机器代码。显然,如果编译器和库是相同的版本,它们应该产生相同的结果。我怀疑它们不是相同的版本。我检查了elf文件,发现它们非常不同。但是我所说的地图文件非常相似。我还没有弄清楚是什么问题。似乎我应该使用windows而不是ubuntu。
              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)