Цитата(Сергей Борщ @ Mar 27 2009, 19:48)

Возможно есть все же какое-то красивое решение?
Ну насколько красивое - решать обществу

Ещё в теме про структуры хотел отписаться, родил тогда "ручной" вариант, но не дописал макросы.
Во:
main.S
Код
.nolist
#include <avr/io.h>
.list
.macro struct_start name
\name\()_begin:
.endm
.macro struct_field name, fldname, size
.set \name\()_\fldname, . - \name\()_begin
.skip \size
.endm
.macro struct_end name
.set \name\()_size , . - \name\()_begin
.endm
.macro set_max name, val1, val2
.if \val1 > \val2
.set \name, \val1
.else
.set \name, \val2
.endif
.endm
.section .structs,"",@nobits
struct_start A
struct_field A, a, 2
struct_field A, b, 1
struct_field A, c, 2
struct_end A
struct_start B
struct_field B, d, 1
struct_field B, e, 2
struct_field B, f, 1
struct_end B
set_max AB_size, A_size, B_size
.data
union1: .skip AB_size
union2: .skip AB_size
.text
.global main
main:
lds R16, union1+A_b
ldi ZL, lo8(union2)
ldi ZH, hi8(union2)
ldd R0, Z+B_e
ldd R1, Z+B_e+1
.end
elf-dump (.data пошло с 0x60):
Код
00000038 <main>:
38: 00 91 62 00 lds r16, 0x0062
3c: e5 e6 ldi r30, 0x65; 101
3e: f0 e0 ldi r31, 0x00; 0
40: 01 80 ldd r0, Z+1; 0x01
42: 12 80 ldd r1, Z+2; 0x02
00000044 <_exit>:
44: ff cf rjmp .-2 ; 0x44 <_exit>
Пойдёт? ;-)
Пописать, чтоли, на ассемблере...
p.s. Для связи с С-программой таки лучше настроить генерацию как в предыдущем сообщении, автоматика будет.