为什么我不能使用SRAM来存储我的数据?

时间:2018-02-17 17:36:29

标签: arduino avr avr-gcc

我为Arduino Micro写了这个简单的闪烁灯程序:

android:theme="@style/checkboxes"

我构建了程序并将其发送给Arduino:

void main() {
  *((volatile unsigned char *)(0x27)) = 128;
  volatile unsigned char x = 0;
  volatile unsigned char y = 0;
  volatile unsigned char z = 0;
start:
  *((volatile unsigned char *)(0x28)) = 0;
  for (x = 0; x < 255; x++) {
    for (y = 0; y < 255; y++) {
      for (z = 0; z < 255; z++) {
      }
    }
  }
  *((volatile unsigned char *)(0x28)) = 128;
  for (x = 0; x < 255; x++) {
    for (y = 0; y < 255; y++) {
      for (z = 0; z < 255; z++) {
      }
    }
  }
  goto start;
}

该计划有效。

然后我尝试 - 只是为了好玩和学习 - 在我选择的地址中将循环控制变量存储在SRAM中。根据{{​​3}},SRAM地址从255开始,因此地址300,301和302在SRAM中。所以我用这种方式修改了程序:

avr-gcc -c -Os -Wall -mmcu=atmega32u4 test.c -o test.o
avr-gcc -Os -Wl,--gc-sections -mmcu=atmega32u4 -o test.elf test.o -lm
avr-objcopy -O ihex -R .eeprom test.elf test.hex
avrdude -patmega32u4 -cavr109 -P/dev/ttyACM0 -b57600 -D -Uflash:w:test.hex:i

我尝试使用与之前相同的命令构建并将其发送到Arduino,但现在它似乎不起作用 - LED已打开,但不会闪烁。

其他来源(例如page 20 of this PDF document)表示SRAM地址从0x60开始,因此我将程序更改为使用地址97,98和99,但程序仍无效。

我做错了吗?

1 个答案:

答案 0 :(得分:0)

问题是我写了“* x ++”,但我应该写“(* x)++”。当我修复它时,该程序工作。以下是修复后的样子:

System.in