Avratmega 0 9 марта, 2018 Опубликовано 9 марта, 2018 · Жалоба Добрый вечер. Есть С++ проект с классами использующими виртуальными функции под 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 думаю что в этом проблема, но как поменять не знаю. Есть идеи как побороть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться