如何在MPLAB中将数组中的值存储到变量?

时间:2013-05-06 16:27:19

标签: c microcontroller mplab

以下代码在CodeBlocks编译器上运行良好,但在MPLAB C18编译器上我得不到相同的结果。我正在使用PIC18单片机。

代码

    int d[6];
    int all;

    d[0] = 6;
    d[1] = 4;
    d[2] = 8;
    d[3] = 0;
    d[4] = 0;

    all =  10000*d[0] + 1000*d[1] + 100*d[2] + 10*d[3] +  d[4];
    printf("%d", all);

CodeBlocks上的输出:64800

MPLAB上的输出: - 816

究竟是什么问题?这段代码不应该正常吗?谢谢!

2 个答案:

答案 0 :(得分:2)

具有int类型的对象无法保证能够存储超出-3276732767的值。你的Code :: Blocks实现恰好扩展了这个范围,但是你的MPLAB C18实现(顺便说一下,它实际上不是一个有效的C实现)。由于有符号整数溢出,您在MPLAB实现中看到的是未定义的行为。使用unsigned类型和/或更广泛的类型,例如longlong long。不要忘记相应地修改printf格式说明符。 %uunsigned int%ldlong%luunsigned long%lldlong long,等等。 ..

答案 1 :(得分:0)

根据此link,您的MCU是8位系统。所以你的系统整数的长度是16位。当您使用 CodeBlocks 模拟代码时,您使用32位系统(或64位系统)运行代码,整数大小为32位。所以你不会得到相同的结果。因为在你的MPLAP系统中你会溢出整数大小