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

 
 
 
Reply to this topicStart new topic
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
Alexey Bishletov
сообщение Oct 8 2007, 05:49
Сообщение #2


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

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



Линкер размещает целые сегменты в имеющуюся память. Сегмент размещается целиком. Т.е. у тебя получался большой сегмент и он не умещался в 40-3ff0, поэтому линкер клал его дальше, а это место оказывалось свободным. Что бы этого небыло надо создавать сегменты с разными именами.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 8 2007, 06:43
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Посмотрите на опцию -P: очень похоже, что она делает то, что Вам нужно.
Go to the top of the page
 
+Quote Post
Beginning
сообщение Oct 8 2007, 07:50
Сообщение #4


Знающий
****

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



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


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


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



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

Точно так или вариант замены поддохшей микросхемы (и не мучиться). Тем более процесс уже пошел.

Сообщение отредактировал alexander55 - Oct 8 2007, 07:59
Go to the top of the page
 
+Quote Post
Alexey Bishletov
сообщение Oct 8 2007, 12:01
Сообщение #6


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

Группа: Новичок
Сообщений: 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
Beginning
сообщение Oct 8 2007, 13:24
Сообщение #7


Знающий
****

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



Огромное спасибо всем кто ответил. Параметр –P решил проблему и снизил патерю байт до 590, что уже вполне приемлемо.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 10th July 2025 - 22:51
Рейтинг@Mail.ru


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