Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR AVR + ATMega32 = Bootloader?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Андрей К. Ф.
Программа до безобразия проста, но это не мешает ей не работать smile.gif
Код
#include <iom32.h>
#define QRZ 16000000L
#define LED_INIT  DDRC |= (1<<PC6)
#define LED_INVERS PORTC ^= (1<<PC6);

__C_task void main( void )
{
  //....
  GICR = 1<<IVCE;
  GICR = 1<<IVSEL;
  __disable_interrupt();
  LED_INIT;
  while (1)
  {
    LED_INVERS;
    __delay_cycles(0.5*QRZ);
  }
}

Компилятор: IAR C/C++ Compiler for AVR 4.20A/W32 [Evaluation] (4.20.1.3)
Компилирую программу и прошиваю ее "как обычно" (т.е. начиная с адреса 0x0000) --- она работает.
Прописываю в опциях линкера разместить программу по адресу 0x3800 (начало бутлоадера) "-M0=3800". HEX при этом выглядит так:
Код
:103800000C94720018951895189518951895189598
:103810001895189518951895189518951895189540
:103820001895189518951895189518951895189530
:103830001895189518951895189518951895189520
:103840001895189518951895189518951895189510
:10385000189518951895189548E055E060E8220FDE
:10386000001F111F10F4052716274A95C1F7089568
:10387000E897D15001E00BBF02E00BBFF894A69A85
:1038800000E415B3102715BB0FEF19E628E101502E
:1038900010402040E1F700C00000F2CF090161E0D4
:1038A00006C0002E69E003C063E001C065E0F801D6
:1038B00008D04FB7F89467BFE895FFFF00004FBFEF
:1038C000089577B770FDFDCF0895FBDF05D00EBBDF
:1038D0001FBB2DBBE29AE19AE199FECF089500004B
:1038E0008895FECF0FE90DBF00E00EBFC0E8D0E025
:1038F0000E9480000E9438000E946F000C946F00AC
:0439000001E0089545
:00000001FF

Фузы прошиваю так:
BOOTSZ = 00
BOOTRST = 0

И, естественно, ничего не работает. Программа не хочет запускаться из секции бутлоадера!
Что я делаю не так???
GDI
Почему бы не взять готовый бутлоадер из апноута атмел и не посмотреть как там все сделано? AVR911 вроде он называется. В нем, кстати есть екселевский файл для рассчета адреса размещения в зависимости от контроллера и от размера области бутлоадера.
IJAR
Цитата(Андрей К. Ф. @ Jun 27 2008, 10:08) *
Программа до безобразия проста, но это не мешает ей не работать smile.gif
Код
#include <iom32.h>
#define QRZ 16000000L
#define LED_INIT  DDRC |= (1<<PC6)
#define LED_INVERS PORTC ^= (1<<PC6);

__C_task void main( void )
{
  //....
  GICR = 1<<IVCE;
  GICR = 1<<IVSEL;
  __disable_interrupt();
  LED_INIT;
  while (1)
  {
    LED_INVERS;
    __delay_cycles(0.5*QRZ);
  }
}

Компилятор: IAR C/C++ Compiler for AVR 4.20A/W32 [Evaluation] (4.20.1.3)
Компилирую программу и прошиваю ее "как обычно" (т.е. начиная с адреса 0x0000) --- она работает.
Прописываю в опциях линкера разместить программу по адресу 0x3800 (начало бутлоадера) "-M0=3800". HEX при этом выглядит так:
Код
:103800000C94720018951895189518951895189598
:103810001895189518951895189518951895189540
:103820001895189518951895189518951895189530
:103830001895189518951895189518951895189520
:103840001895189518951895189518951895189510
:10385000189518951895189548E055E060E8220FDE
:10386000001F111F10F4052716274A95C1F7089568
:10387000E897D15001E00BBF02E00BBFF894A69A85
:1038800000E415B3102715BB0FEF19E628E101502E
:1038900010402040E1F700C00000F2CF090161E0D4
:1038A00006C0002E69E003C063E001C065E0F801D6
:1038B00008D04FB7F89467BFE895FFFF00004FBFEF
:1038C000089577B770FDFDCF0895FBDF05D00EBBDF
:1038D0001FBB2DBBE29AE19AE199FECF089500004B
:1038E0008895FECF0FE90DBF00E00EBFC0E8D0E025
:1038F0000E9480000E9438000E946F000C946F00AC
:0439000001E0089545
:00000001FF

Фузы прошиваю так:
BOOTSZ = 00
BOOTRST = 0

И, естественно, ничего не работает. Программа не хочет запускаться из секции бутлоадера!
Что я делаю не так???


Правильно - не должна работать:
:10 3800 00 0C 94 72 00 18 95 18 95 18 95 18 95 1895189598
означает:
начиная с адреса 0x3800 записать следующие 16 байт
0x3800 0x940C 0x0072 jmp 0x0072
0x3802 0x9518 reti
0x3803 0x9518 reti
......

т.е. при старте с адреса 0x3800 будет выполнен
переход на адрес 0x0072 - где может быть все что угодно,
но только не Ваша программа

Чтобв компилятор положил код с нужного адреса надо отрихтовать файл .xls
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.