我正在尝试使用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
这种行为的原因是什么?