Перейти к содержанию
    

Таблица виртуальных функций по адресам >64k в IAR AVR

Добрый вечер.

Есть С++ проект с классами использующими виртуальными функции под 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 думаю что в этом проблема, но как поменять не знаю. Есть идеи как побороть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...