Estoy tratando de incrustar código en mi proyecto Attiny4 que establecerá los fusibles y los bits de bloqueo (en AtmelStudio 7). Copié / pegué el código que Atmel sugiere aquí :
#include <avr/io.h>
typedef struct _tagConfig
{
unsigned char f1;
} Config;
typedef struct _tagLock
{
unsigned char f1;
} Lock;
typedef struct _tagSig
{
unsigned char f1;
unsigned char f2;
unsigned char f3;
} Signature;
Config __config __attribute__((section(".config"))) =
{
f1 : 0xfb, // Set CKOUT
};
Lock __lock __attribute__((section(".lock"))) =
{
f1 : 0xfc, // Further programming and verification disabled
};
Signature __sig __attribute__((section(".signature"))) =
{
f1 : 0x03,
f2 : 0x90,
f3 : 0x1e,
};
Luego trato de compilar y falla directamente con los siguientes errores:
attiny4-fan.elf section '.config' will not fit in region 'config'
region 'config' overflowed by 1 bytes
ld returned 1 exit status
recipe for target 'attiny4-fan.elf' failed
Parece que no puedo encontrar otra información sobre cómo hacer esto para un ATTiny4 / 5/9/10. La hoja de datos parece mencionar algo sobre las ubicaciones, pero como nunca he hecho esto antes, especialmente para el Attiny4 con el que estoy jugando aquí, no tengo idea de cómo proceder.
Esta es la salida de
avr-objdump --section-headers
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000000c8 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800040 00800040 0000013c 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000003 00800040 00800040 0000013c 2**0
ALLOC
3 .comment 00000030 00000000 00000000 0000013c 2**0
CONTENTS, READONLY
4 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 0000016c 2**2
CONTENTS, READONLY
5 .debug_info 000002ab 00000000 00000000 000001a8 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 00000284 00000000 00000000 00000453 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 000000d3 00000000 00000000 000006d7 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_str 000000f6 00000000 00000000 000007aa 2**0
CONTENTS, READONLY, DEBUGGING
Mientras tanto, también descubrí que en el archivo de encabezado ATtiny DFP para Attiny4 / 5/9/10, se definen las siguientes macros (ATtiny9 como ejemplo):
/* Fuses */
#define FUSE_MEMORY_SIZE 0
/* Lock Bits */
#define __LOCK_BITS_EXIST
/* Signature */
#define SIGNATURE_0 0x1E
#define SIGNATURE_1 0x90
#define SIGNATURE_2 0x08
¿Por qué FUSE_MEMORY_SIZE se define como 0?
¿Puede alguien ayudarme a que mi ELF contenga fusibles y brocas de bloqueo?