Здравствуйте
Впервые пишу будлоадер. (не судите строго)
Пишу в IAR 5.2.1 под АТmega128.
Создал проект, написал свой *.xcl
Вектор ресет на адрес 0x0000
В *xcl указал адрес кода 0хf000-0xffff, в этом пространстве и вектора прерываний.
Тоесть, если есть прога то она запускается если нет то бутлоадер(думаю).
*.xcl :
Код
// The '_..X_' prefix is used by C-SPY as an indication that the label should
// not be displayed in the dissassembly window.
//
// Set up XLINK
-ca90
-w29
/* Code memory - this line is generated with preprocessor.xls */
-Z(CODE)INTVEC,FAR_F,SWITCH,CODE=F000-FFFF
/*EEPROMMEMORY*/
-Z(XDATA)EEPROM_I,EEPROM_N=0-FFF
//////////////////////////////////////////////////////////////////////////////
//SRAM
-D_..X_CSTACK_SIZE=200 /* 512 bytes for auto variables and saved registers. */
-D_..X_RSTACK_SIZE=40 /* 64 bytes for return addresses, equivalent to 32 */
/* levels of calls, including interrupts. */
-D_..X_HEAP_SIZE=100 /* 256 bytes of heap. */
-D_..X_SRAM_BASE=100 /* Start of ram memory */
-D_..X_SRAM_TEND=100 /* End of tiny ram memory */
-D_..X_SRAM_END=10FF /* End of ram memory */
-D_..X_EXT_SRAM_BASE=0 /* Start of exram memory */
-D_..X_EXT_SRAM_SIZE=0 /* End of exram memory */
-Z(DATA)TINY_I,TINY_Z,TINY_N=_..X_SRAM_BASE-_..X_SRAM_TEND
-Z(DATA)NEAR_I,NEAR_Z=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-(_..X_EXT_SRAM_BASE+_..X_EXT_SRAM_SIZE)
-Z(DATA)RSTACK+_..X_RSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END /* ,_..X_EXT_SRAM_BASE-(_..X_EXT_SRAM_BASE+_..X_EXT_SRAM_SIZE) */
-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END /* ,_..X_EXT_SRAM_BASE-(_..X_EXT_SRAM_BASE+_..X_EXT_SRAM_SIZE) */
-Z(DATA)HEAP+_..X_HEAP_SIZE=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-(_..X_EXT_SRAM_BASE+_..X_EXT_SRAM_SIZE)
Код бутлоадера:
Код
#include <ioavr.h>
#pragma vector=USART1_RXC_vect
__interrupt void irqINT0_vect (void)
{
}
void main()
{
long address;
unsigned int temp_int;
unsigned char val;
/*Initialization*/
void (*funcptr)( void ) = 0x0000; // Set up function pointer to RESET vector.
/*Body*/
//.....
/* Jump to Reset vector 0x0000 in Application Section.*/
funcptr();
}
Прога которая загружается бутлоадером создана обычно, тоесть вектора сначала, код в адресе 0х0000-0xEFFF.
Да, эта же прога должна и запускать бутлоадер думаю так
Код
void (*pBoot)( void ) = 0xf000;
pBoot();
Вопрос:
В бутлоадера есть свои вектора прерываний по адресу 0xf000 и свой стартап , переменные… в проги свои. Как себя поведет, контролер, если выполнится стартап проги потом будлоадера потом снова проги и так дали? В какие прерывания будет попадать бут.. и прога (по адресу 0х0000 или 0хf000)? Что будет делаться с теми переменами которые были в проге, какая была переписана другой (глобальные, внутренние ?)