реклама на сайте
подробности

 
 
> IAR ARM линкер выдает R_ARM_THM_JUMP11
megajohn
сообщение Oct 18 2013, 09:25
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



LPC1114 + IAR ARM6.3
в проекте вырезал уже многое.
вот с чем борюсь

Код
u32 mem_arr[2];
memset( mem_arr, 0, sizeof( mem_arr ) );

работает

меняю размер на 3 и не работает =(

Код
Error[Lp002]: relocation failed: value out of range or illegal: 0xfffff7fe
     Kind    : R_ARM_THM_JUMP11[0x66]
     Location: 0x00000f58
               Module:  I:\projects\tetra\mcu\Debug\Obj\startup_LPC11xx.o
               Section: 17 (.text)
               Offset:  0x0
     Target  : 0x0000075b
               "SysTick_Handler"
               Module:  I:\projects\tetra\mcu\Debug\Obj\other.o
               Section: 8 (.text)
               Offset:  0x1f


памяти достаточно (ROM занято 3 338+52 из 32кб, RAM занято 5 744 из 8кб )
да и на отсутсвие памяти ругается как Error[Lp011]: section placement failed: unable to allocate space for sections/blocks with a total estimated minimum size of 0x2604 bytes in <[0x10000000-0x10001fdf]> (total uncommitted space 0x1fe0).
я так понял что при линковке не может вставит инструкцию JUMP до функции SysTick_Handler ?

на IAR ARM 6.6 тоже самое

гугль пока не помог

в мап-файлах ничего выдающегося не нашел
Прикрепленный файл  2ok.txt ( 22.16 килобайт ) Кол-во скачиваний: 635
Прикрепленный файл  3fail.txt ( 22.72 килобайт ) Кол-во скачиваний: 684


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Oct 18 2013, 14:01
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Смущает другое - эта функция оформлена как PUBWEAK, т.е. должна была быть заменена на объявленную пользователем. В реальности же линкер выкинул только метку, но не содержимое этой секции (SECTION .text:CODE:REORDER(1)). Можно предположить, что следом должна была идти другая команда SECTION, начинающая другой участок кода, но она потерялась и линкер, используя метку из следующего кода был вынужден захватить и эту команду. И если исходно она должна была сделать переход сама на себя, то теперь она должна перейти на пользовательский обработчик, до которого уже не дотягивается.

Вообще, по моим понятиям порочный тут уже сам факт написания этого кода на ассемблере - весь этот файл легко пишется на С/С++


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th August 2025 - 00:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016