Static ATmega 328p在使用静态函数时表现异常

Static ATmega 328p在使用静态函数时表现异常,static,microcontroller,arduino,avr-gcc,Static,Microcontroller,Arduino,Avr Gcc,我正在尝试使用328p(Arduino以太网)来控制Wiznet W5100以太网控制器。我正在使用的库已经过测试并且可以使用,但对我来说它们没有。以下是我追踪问题的原因: 我试图读取两个寄存器,它们告诉我W5100接收了多少字节的数据: uint16_t readTest() { uint16_t res = W5100.read(0x0426); res = (res << 8) + W5100.read(0x0427); return res;

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

我试图读取两个寄存器,它们告诉我W5100接收了多少字节的数据:

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

这种行为的原因是什么?

static
允许编译器进行更积极的内联。因此,准确的代码调用
readTest()
对于任何建议都很重要。您还可以通过使用
avr objdump
工具分解目标文件来查看生成的汇编程序代码。现在,通过在合并前将两个字节存储在不同的uint16中,可以解决此错误:uint16\u t b1=W5100.read(0x0426);uint16_t b2=W5100。读取(0x0426);返回((b1
static uint16_t readTest() 
{
    uint16_t res = W5100.read(0x0426);
    res = (res << 8) + W5100.read(0x0427);
    return res;                                             
}
uint16_t readTest() 
{
    return (W5100.read(0x0426) << 8) + W5100.read(0x0427);
}
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