Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bootloader на AVRGCC
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
_Артём_
Здраствуйте.
Пробую написать boot на GCC (m128).
Ввёл такой код:

CODE

#include <avr/boot.h>
#include <avr/io.h>

__attribute__ ((section (".bootloader"))) int main(void)
{
PORTC=0x15;
PORTE=0x53;
volatile unsigned long Count=10;
unsigned short page_number;
unsigned char FlashPage[SPM_PAGESIZE];
for (unsigned short i=0; i<SPM_PAGESIZE; i++) {FlashPage[i]=i&255;}

for (page_number=0; page_number<496; page_number++) {
FlashPage[0]=page_number&255;
uint16_t i;
uint32_t page=page_number;
uint8_t *buf=FlashPage;
page*=SPM_PAGESIZE;

// Disable interrupts.

boot_rww_enable ();


boot_page_erase (page);
boot_spm_busy_wait (); // Wait until the memory is erased.

for (i=0; i<SPM_PAGESIZE; i+=2) {
// Set up little-endian word.

uint16_t w = *buf++;
w += (*buf++) << 8;

boot_page_fill (page + i, w);
}

boot_page_write (page); // Store buffer in flash page.
boot_spm_busy_wait(); // Wait until the memory is written.

// Reenable RWW-section again. We need this if we want to jump back
// to the application after bootloading.

boot_rww_enable ();
}
}

Откомпилировал и появились вопросы.
1) В AvrStudio код расположился начиная от адреса 0, несмотря на объявление main как __attribute__ ((section (".bootloader"))). Очевидно что-то требуется указать дополнительно. Что и где?
В AtmelStudio 6 код расположился начиная с адресов 0x1F000, что правильно, но непонятно почему не 0x1F800 или какой другой вариант из 3 оставшихся (пока не понял эту студию).
2) В обоих случаях в начале кода присутствует таблица векторов, которая не нужна в данном случае. Как её убрать?

Спасибо.
XVR
Правьте линкерный скрипт и стартап. (ищите файлы с расширением *.ld и crt0.s)
_Артём_
Цитата(XVR @ Mar 20 2012, 11:53) *
Правьте линкерный скрипт и стартап. (ищите файлы с расширением *.ld и crt0.s)


Что без правки скрипта и стартапа никак?

Цитата
crt0.s

Чтот не нашёл такой файл на компе. Где он должен быть?
XVR
Цитата(_Артём_ @ Mar 20 2012, 14:22) *
Что без правки скрипта и стартапа никак?
Может быть там есть готовые. Если нет - придется делать свои

Цитата
Чтот не нашёл такой файл на компе. Где он должен быть?
Где то во внутренностях gcc toolchain'а. Нету у меня AvrStudio, не могу сказать, где оно у нее там лежит biggrin.gif
_Артём_
Цитата(XVR @ Mar 20 2012, 12:28) *
Где то во внутренностях gcc toolchain'а. Нету у меня AvrStudio, не могу сказать, где оно у нее там лежит biggrin.gif


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