Цитата(lisstret @ Jan 22 2013, 06:51)

Как сделать так, чтоб во внешний СРАМ загружались данные программы.
Никаких бутлоадеров не нужно, просто надо как можно раньше включить интерфейс внешней памяти.
Для avr-gcc (WinAVR, AVR-STUDIO 6 с еёйным toolchain и т.д.) нужно поместить короткий код
в секцию памяти кода .init3, которая выполнится до копирования инициализированных данных из флеша в ОЗУ и до очистки bss (в .init1 тоже можно, но осторожнее).
У меня это макросами
Код
#define INIT_CODE(_number_,_name_)\
static void init_##_number_##_##_name_ (void) __attribute__ ((section(".init" #_number_), naked, used));\
static void init_##_number_##_##_name_ (void)
#define INIT_CODE_(n,l) INIT_CODE(n,l)
#define INIT(_number_) INIT_CODE_(_number_,__LINE__)
и где-то в программе такое:
Код
INIT(3)
{
MCUCR = (1 << SRE);
XMCRA = (4 << SRL0) | (0 << SRW00);
XMCRB = (1 << XMBK);
}
В других компиляторах надо смотреть в сторону __low_level_init() и подобного, такая функция, по идее, должна вызываться до инициализации памяти. Но она уже будет вызываться, так что стек должен быть во внутренней памяти (что и так желательно для большей скорости работы). В случае с init-секциями код выполняется линейно, без вызовов и стек не нужен.