Пробую написать 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) В обоих случаях в начале кода присутствует таблица векторов, которая не нужна в данном случае. Как её убрать?
Спасибо.