首先是一些背景.在微小的数据中,数据可以存储在寄存器,sram,eeprom或程序空间中.寄存器和sram是易失性存储,而eeprom和程序空间则不是.(即:未通电时数据停留.)
在c中编程时(使用avr-gcc库),典型代码可能如下所示:
#define F_CPU 8000000UL
#include <inttypes.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
//This data is put in the eeprom
const uint8_t dat_eeprom EEMEM= 0xab;
//This data is put in the program space
const uint8_t dat_pgm_space PROGMEM= 0xcd;
//This data is stored in the sram
uint8_t dat_sram = 0xef;
int main(){
while(1){
;;
}
}
Run Code Online (Sandbox Code Playgroud)
编译:
avr-gcc -g -mmcu=attiny44 -o test.elf test.c
Run Code Online (Sandbox Code Playgroud)
并从.elf中提取intel .hex:
avr-objcopy -j .text -j .data -O ihex test.elf test.hex
Run Code Online (Sandbox Code Playgroud)
我们得到以下test.hex:
:1000000011C023C022C021C020C01FC01EC01DC0FF
:100010001CC01BC01AC019C018C017C016C015C01C
:1000200014C0CD0011241FBECFE5D1E0DEBFCDBF8F
:1000300010E0A0E6B0E0EAE5F0E002C005900D9225
:10004000A236B107D9F702D006C0DACFCF93DF933B
:0A005000CDB7DEB7FFCFF894FFCF65 …Run Code Online (Sandbox Code Playgroud)