我为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,但程序仍无效。
我做错了吗?
答案 0 :(得分:0)
问题是我写了“* x ++”,但我应该写“(* x)++”。当我修复它时,该程序工作。以下是修复后的样子:
System.in