Цитата(IVN2013 @ Jan 27 2014, 22:36)

В данном варианте начальный старт обязательно происходит в части приложения и только потом по определнному сигналу - переход в область бутлоадера и все остальное.
Что мешает сбросить МК по определённому сигналу и перейти на бут с помощью соответствующим образом настроенных фуз? Сброс нужен чтобы привести МК в определённое состояние - в загрузчике трудно предусмотреть все варианты сброса периферии (мало ли как application её настроит). Ну да ладно - обсуждали уже...Дело ваше...
Цитата(IVN2013 @ Jan 27 2014, 22:36)

Так вот - столкнулся с трудностью принятия массива байтов при нахождении программы в области бутлоадера(насколько я понимаю здесь прием долже быть не по прерыванию).
Неправильно понимаете - по прерыванию тоже можно принимать (если хочется). Нужно бит IVSEL в MCUCR настроить на таблицу в бутлоадере (к тому же выкинуть её из бута ещё постараться надо - всё равно место займёт).
Цитата(IVN2013 @ Jan 27 2014, 22:36)

Не получается вызвать функцию приема из следующей функции (при размещении в области приложения все хорошо работало) :
Код
_[b]_attribute__((section(".bootloader"))) unsigned char USART_Receive(void)
[/b]
[b]{
while( !(UCSR1A & _BV(RXC1)) );
return UDR1;
}[/b]
__attribute__((section(".bootloader"))) void boot_program_page(void)
{
//стирание application сектора из flash памяти
while (0x01cf00 > addr)
{
boot_page_erase(addr); // стирание страницы
boot_spm_busy_wait(); // задержка на время стирания
addr += SPM_PAGESIZE;
}
А зачем вам функции в загрузчике? Почему бы их на inline-функции не переделать? Ну это так, к слову.
Цитата(IVN2013 @ Jan 27 2014, 22:36)

Код
UCSR1B = (1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1)|(1<<TXCIE1);
UCSR1C = (0<<UCSZ12)|(1<<UCSZ11)|(1<<UCSZ10)|(0<<USBS1)|(0<<UPM11)|(0<<UPM10);
(1<<RXCIE1)|(1<<TXCIE1); - прерывания по приёму зачем разрешены? А глобальные прерывания запрещены? Или нет? Может у вас байты application-программой принимаются? Можно только гадать - проекта нет. Да ещё и бут стартует не сразу после сброса - вариантов многовато...