Примерно так (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Codavr 24 мая 2005 г. 12:00
В ответ на: AVR, помогите чайнику по загрузчику... отправлено <font color=gray>dot</font> 24 мая 2005 г. 10:56

Я просто размещал в RWW массив указателей на функции.

Вот выдержка касающаяся АЦП

#define _RWW_LOW_ @ "RWW_LOW"
#define _RWW_HIGH_ @ "RWW_HIGH"
#define _NRWW_SEG_ @ "NRWW_SEG"
#define _STUB_SEG_ @ "STUB_SEG"

//здесь определяем адрес заглушки который получаем после линковки загрузчика (ручками ибо загружаемый модуль ничего не знает о том чего я там налабал в загрузчике)
#define _STUB_ADDR (void(*)()) 0x0FE6

#ifdef _ADC_CODE_
#define ptrADC_handler ADC_Full
#else
#define ptrADC_handler _STUB_ADDR
#endif /* _ADC_CODE_ */

//Это сам массив расположенный по адресу 0x00 в полном виде(со всеми указателями)
__root __flash const struct{
void(*BackgroundWorkLoop)();
void(*SetWorkBuf)();
void(*WorkModeInit)();
void(*EECodeUBRRL)();
void(*EECodeUBRRH)();
void(*EESPM_Code_BR_UBRRL)();
void(*EESPM_Code_BR_UBRRH)();
void(*TWI_PageWrite)();
void(*TWI_SignatureQuery)();
void(*TWI_DataQuery)();
void(*TWI_Int)();
void(*TXC_Int)();
void(*ADC_handler)();
void(*INT1_handler)();
void(*Timer1_handler)();
void(*Timer1_Start)();
void(*Timer1_Stop)();
WORD(*CRC_update)(BYTE, WORD);
BYTE WorkCodeFlag;
} @ 0x00 = { ptrBackgroundWorkLoop, ptrSetWorkBuf, ptrWorkModeInit, ptrEECodeUBRRL, ptrEECodeUBRRH, ptrEESPM_Code_BR_UBRRL, ptrEESPM_Code_BR_UBRRH, ptrTWI_PageWrite, ptrTWI_SignatureQuery, ptrTWI_DataQuery, ptrTWI_Int, ptrTXC_Int, ptrADC_handler, ptrINT1_handler, ptrTimer1_handler, ptrTimer1_Start, ptrTimer1_Stop, _CRC_ADDR, WorkCodeState};


#pragma vector=ADC_vect
__interrupt void ADC_INT(void) _NRWW_SEG_
{
ADC_handler(); //Это вызов расположенный в NRWW
}

__root void Stub(void) _STUB_SEG_
{
//Это заглушка прописанная в загрузчике
}

__root void ADC_Full(void) _RWW_LOW_
{
//А вот здесь находится сам обработчик АЦП
}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru