小编use*_*332的帖子

简而言之,当微控制器通电时,如何将数据存储在sram中进行初始化?

首先是一些背景.在微小的数据中,数据可以存储在寄存器,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)

assembly avr avr-gcc

5
推荐指数
1
解决办法
1088
查看次数

标签 统计

assembly ×1

avr ×1

avr-gcc ×1