1

我正在尝试使用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 关键字:

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

这种行为的原因是什么?

4

0 回答 0