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

 
 
> Непонятно работает LINKER IAR
Beginning
сообщение Oct 7 2007, 16:17
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Суть проблемы в следующем. Есть область памяти с сбойными 16 байтами, где-то в районе 16 кил. И мне надо обходить эту область. Я применял два способа. Первый задавал в XLINK для CODE (40-3ff0,400F-FFFF) сегмента два диапазона с дыркой в этих байтах, и второй резервировал данные по этому адресу:
#pragma location=0x3FF0
const uint8 bag[16];
Оба способа приводили к следующей непонятности. По адресу x160 код заканчивался, далее все нули, и начинался только с x4010. В общем 16 кил в трубу. Перепробовал все типы компиляции (оптимизация по скорости и по коду), баг пропадал только при max hight speed. Но этот тип оптимизации мне не нужен. В чём может быть проблема?


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Beginning
сообщение Oct 8 2007, 07:50
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



С разными именами можно, но по пойму лишние сложности. Т.е. я должен одни функции расположить в сегменте, например CODE1, а оставшиеся в сегменте CODE2? При этом я должен чётко определить си следить за размерами скомпелированной программы, что бы она влазила в сегменты? Почему LINKER не делает бональный goto (ASM B END_BAG)?


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
Alexey Bishletov
сообщение Oct 8 2007, 12:01
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 121
Регистрация: 15-08-06
Пользователь №: 19 557



Цитата(Beginning @ Oct 8 2007, 11:50) *
С разными именами можно, но по пойму лишние сложности. Т.е. я должен одни функции расположить в сегменте, например CODE1, а оставшиеся в сегменте CODE2? При этом я должен чётко определить си следить за размерами скомпелированной программы, что бы она влазила в сегменты? Почему LINKER не делает бональный goto (ASM B END_BAG)?

Линкер не может разделить одну целую часть сегмента, сделанную компилятором на две. Компилятор не делит одну функцию на две части сегмента. Каждая функция является отдельной целой частью сегмента. Т.е. что бы место не пропадало, надо в проекте иметь сравнительно небольшие функции и, как уже написали, использовать опцию -Р вместо -Z, тогда линкер сможет перетасовать части, что бы они лучше подходили к имеющейся памяти.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:34
Рейтинг@Mail.ru


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