songfei 发表于 2013-1-26 17:59:40

对这段C代码的运行结果感觉很诧异!!内存赋初值问题。


unsigned int map_low;
unsigned int map_high;


void clean_map()
{
        for(int i=0; i<4; i++)
        {
                for(int j=0; j<10; j++)
                {
                        map_low =0;
                        map_high = 0;
                }
        }
}


void print_map()
{
        for(int i=0; i<4; i++)
        {
                for(int j=0; j<10; j++)
                {
                        mprintf("[%u,%u]\t",map_low ,map_high);
                }
                mprintf("\n");
        }
}

int main()
{
       
        UART_Init(56000);
        board_init();       
        clean_map();
        print_map();
        while(1)
        {
               
               

        }

}       

代码就是这样的,那个 mprintf是往串口输出数据的。

结果很诡异!


songfei 发表于 2013-1-26 18:00:19

在 LGT上面的, avr-gcc

automaticdai 发表于 2013-1-26 19:45:00

{:sweat:}         

kevinstar888 发表于 2013-1-26 20:06:08

{:lol:}在vc+++6.0上运行没问题

i55x 发表于 2013-1-26 20:07:28

我用mingw4.6.1(跟你的avr-gcc同属gcc家族)编译了一下,完全没问题,全是。

jasonzhu8888 发表于 2013-1-26 20:09:21

是不是定义的内存区域超出芯片空间了

i55x 发表于 2013-1-26 20:14:57

kevinstar888 发表于 2013-1-26 20:06 static/image/common/back.gif
在vc+++6.0上运行没问题

在vc++6上面楼猪的程序是编译不过去的,你是冒充c++才编译过去的,这不科学。
mingw只要加一个参数-std=c99(楼猪的工程也有这个参数),楼猪的程序就可以按c语言编译通过。

songfei 发表于 2013-1-26 20:23:48

i55x 发表于 2013-1-26 20:07 static/image/common/back.gif
我用mingw4.6.1(跟你的avr-gcc同属gcc家族)编译了一下,完全没问题,全是。 ...

问题找到了 ,应该是栈地址不够用了吧 , LGT的内存只有 512B。

songfei 发表于 2013-1-26 20:24:47

i55x 发表于 2013-1-26 20:14 static/image/common/back.gif
在vc++6上面楼猪的程序是编译不过去的,你是冒充c++才编译过去的,这不科学。
mingw只要加一个参数-std=c ...

我那个就是标准C, 编译没有问题的。

i55x 发表于 2013-1-26 20:27:19

songfei 发表于 2013-1-26 20:24 static/image/common/back.gif
我那个就是标准C, 编译没有问题的。

我跟你用的都是gcc,只不过你的是生成avr代码,我的mingw是生成windows应用程序的,大部分参数一样。
他用的是visual c++,你的代码是编译不过去的,只能改成.cpp文件来编译,毕竟c和c++语法差异很大,不太能说明问题。

songfei 发表于 2013-1-26 20:31:16

i55x 发表于 2013-1-26 20:27 static/image/common/back.gif
我跟你用的都是gcc,只不过你的是生成avr代码,我的mingw是生成windows应用程序的,大部分参数一样。
他 ...

gcc是可以编译的,你估计是没包含头文件吧 ,还有 mprintf这个函数是我自己写的,要改成 printf,

main函数里的无关的删掉,就可以啦。

#include <stdio.h>

songfei 发表于 2013-1-26 20:32:35

i55x 发表于 2013-1-26 20:27 static/image/common/back.gif
我跟你用的都是gcc,只不过你的是生成avr代码,我的mingw是生成windows应用程序的,大部分参数一样。
他 ...

windows程序和单片机程序区别就很大了,这个问题最大的区别是 内存大小。

感谢~!~ 哈哈
页: [1]
查看完整版本: 对这段C代码的运行结果感觉很诧异!!内存赋初值问题。