ATmega 328p表现出奇怪的静态功能

时间:2011-09-21 00:40:23

标签: static microcontroller arduino avr-gcc

我正在尝试使用ATmega 328p(Arduino以太网)来控制Wiznet W5100以太网控制器。我正在使用的库已经过测试和工作,但对我来说却没有。以下是我追踪问题的原因:

我正在尝试读取两个寄存器,告诉我W5100收到了多少字节的数据:

uint16_t readTest() 
{
    uint16_t res = W5100.read(0x0426);
    res = (res << 8) + W5100.read(0x0427);
    return res;                                             
}

但是即使我没有发送任何数据,从main()调用的这个函数将返回1024而不是0.现在出现了奇怪的部分:如果我添加如下静态关键字:

static uint16_t readTest() 
{
    uint16_t res = W5100.read(0x0426);
    res = (res << 8) + W5100.read(0x0427);
    return res;                                             
}

然后函数突然返回0,因为它应该! 我也可以改成它:

uint16_t readTest() 
{
    return (W5100.read(0x0426) << 8) + W5100.read(0x0427);
}

这一定是编译器搞砸了我。我真的不明白。要编译我使用标准的Arduino IDE,命令看起来像这样:

avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=22 -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/libraries/SoftwareSerial -I/home/xc317/sketchbook/libraries/serlcd -I/usr/share/arduino/libraries/SPI -I/usr/share/arduino/libraries/Ethernet -I/usr/share/arduino/libraries/Ethernet/utility /usr/share/arduino/libraries/Ethernet/Server.cpp -o/tmp/build1305752250561284982.tmp/Ethernet/Server.cpp.o

这种行为的原因是什么?

0 个答案:

没有答案