Добрый вечер.
Есть С++ проект с классами использующими виртуальными функции под Atmega2560, версия IAR 7.10.4 . Стал для этого проекта делать бутлоадер, который будет размещаться в NRWW секции (адреса 0x1F000-0x1FFFF). Так как библиотеки на С++ то делаю на них. При сборе проекта возникает ошибка:
Цитата
Error[e18]: Range error,
Number out of range. Valid range is -128 (-0x80) to 255 (0xFF).
File: C:\projects\Embedd\AVR\Hal\src\SystemTimer.cpp, Line: 14
Source: LDI R19, (??__vtbl) >> 8
Where $ = SystemTimer::SystemTimer() + 0x2 [0x3E3EA]
in module "SystemTimer" (C:\projects\Embedd\AVR\UslipBootloader\Debug\Obj\SystemTimer.r90),
offset 0x2 in segment part 17, segment FARCODE
What: 8 ? (SystemTimer::__vtbl >> 1 & 0x7FFFFFFF) >> 8 - 1 : SystemTimer::__vtbl [0x3E0]
Allowed range: 0xFFFFFF01 - 0xFF
Operand: SystemTimer::__vtbl [0x3e073]
in module SystemTimer (C:\projects\Embedd\AVR\UslipBootloader\Debug\Obj\SystemTimer.r90),
Offset 0x0 in segment part 13, segment NEAR_F
Error while running Linker


Ругается на код:
Код
SystemTimer* SystemTimer::_instance = NULL;

SystemTimer::SystemTimer() : _cachedMsValue(0), _cachedTccrb(0),
    _cachedTcnt(0), _type(ITimer::PERIODIC)
{
    _instance = this;
}


Конфигурация в .xcl файле:
Цитата
-Z(CODE)INTVEC,NEAR_F,SWITCH,DIFUNCT,CODE,FARCODE,INITTAB,HUGE_F,TINY_ID,NEAR_ID=
3E000-3FFFF
-P(CODE)FAR_F=[3E000-3FFFF]/10000
-Z(CODE)CHECKSUM#3FFFF

Насколько я понимаю, значение указателя на таблицу виртуальных функций стало 3 байта вместо 2. Но IAR генерирует код для 2-х байтных указателей. В настройках рантайма стоит __vtable_memory = __nearflash думаю что в этом проблема, но как поменять не знаю. Есть идеи как побороть?