Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 23.09.2008, 14:11   #1
scada
Senior Member
 
Регистрация: 03.01.2008
Сообщений: 183
Вес репутации: 116/47
scada will become famous soon enoughscada will become famous soon enough
По умолчанию Скрипт линкера для PIC24H

Вопросик к знатокам, кто сталкивался.
Необходимо, что бы в программе весь мой код размещался в 4 секциях, секции разместились бы в определенном порядке и по необходимым адресам.
Переделал скрипт под свои цели. Все вроде бы получилось, один нюанс, с которым не могу справиться: хотелось бы, чтобы секции были выровнены по границе блоков 0x400, а все оставшееся место в последнем блоке секции до начала следующей секции ничто не занимало, тоесть компилятор не пытался в это свободное место впихнуть еще что-то.
Вот что получилось в результате в скрипте:
Код:
 .text __CODE_BASE :
  {
    *(.init);
        *(.handle);   
        *(.libc) *(.libm) *(.libdsp);  /* keep together in this order */
        *(.lib*);
        . = . + 0x238;
  *(.main_entry);
  *(.loader);  
  *(.section_a);
  *(.section_b);       
  } >program
 
 
 main_entry 0x1000: 
     {
  *(main_entry);
  } >program
 
 loader 0x1400:
  {
    *(loader);   
  } >programm     
 section_a 0x2000:
  {
    *(section_a);   
  } >programm  
 
 section_b 0x3C00:
  {
    *(section_b);   
  } >programm
После окончания секции .lib, начавшейся с адреса 0x400 осталось свободными 0x238 адресов до адреса 0x1000, тоесть до начала секции main_entry. Добавил строку . = . + 0x238. Теперь компилятор указал, что размер секции .lib равен 0xС00, тоесть я вышел на начало секции main_entry. У секции main_entry тоже есть свободное пространство до начала следующей секции. Но я уже не могу заполнить ее, указать компилятору ее размер с учетом сободного пространства. Все, что я пробовал, вызывает либо ошибку синтаксиса, либо перекрытие секций. Руководство пользователя по ассемблеру, линкеру и утилитам прочитал, вроде там все понятно, в п. 9.8.3. все красиво, а в реале не получается. Может кто поделится опытом?
scada вне форума   Ответить с цитированием
Старый 23.09.2008, 15:10   #2
Bill
Senior Member
 
Аватар для Bill
 
Регистрация: 26.02.2007
Адрес: Челябинск
Возраст: 70
Сообщений: 2,215
Вес репутации: 1898/88
Bill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant futureBill has a brilliant future
По умолчанию Ссылка ->

http://ftp.linux.kiev.ua/pub/docs/de...d/gnuld-3.html
Авось поможет. Или нет?
Bill вне форума   Ответить с цитированием
Старый 23.09.2008, 15:17   #3
scada
Senior Member
 
Регистрация: 03.01.2008
Сообщений: 183
Вес репутации: 116/47
scada will become famous soon enoughscada will become famous soon enough
По умолчанию Ответ: Скрипт линкера для PIC24H

Посмотрим, может быть и поможет. Английский я читаю, но мало ли, вдруг нюанс какой-то упустил, русский проще читать. Спасибо.
scada вне форума   Ответить с цитированием
Старый 25.09.2008, 09:56   #4
scada
Senior Member
 
Регистрация: 03.01.2008
Сообщений: 183
Вес репутации: 116/47
scada will become famous soon enoughscada will become famous soon enough
По умолчанию Ответ: Скрипт линкера для PIC24H

В принципе, нашел способ, как выкрутиться, если кому интересно и пригодиться. Странно, что не получилось нормальным и логичным способом, как описано в документе. Атрибут ALIGN() должен был решить эту проблему, но почему-то вызывал ошибку синтаксиса.
В конце каждой выходной секции я увеличивал счетчик адреса на величину свободных адресов до границы следующего блока. Способ плохой, так как всякий раз при изменении кода во входных секциях надо снова пересчитывать это число. Но, тем не менее, выход есть.
Код:
.text __CODE_BASE :
  {
    *(.init);
        *(.handle);   
        *(.libc) *(.libm) *(.libdsp);  /* keep together in this order */
        *(.lib*);
        . = . + 0x <--- количество свободных адресов до начала моей программы;
  } >program
 
 
 main_entry 0x1000: 
     {
  *(main_entry);
  . = . + 0x <--- количество свободных адресов до следующего блока;
  } >program
 
 loader 0x1400:
  {
    *(loader);   
   . = . + 0x <--- количество свободных адресов до следующего блока;
  } >programm   
 
 section_a 0x2000:
  {
    *(section_a);  
    . = . + 0x <--- до следующего блока; 
  } >programm  
 
 section_b 0x3C00:
  {
    *(section_b);  
    . = . + 0x <--- до следующего блока; 
  } >programm
scada вне форума   Ответить с цитированием
Старый 25.09.2008, 10:12   #5
Alex B.
Super Moderator
 
Аватар для Alex B.
 
Регистрация: 25.02.2007
Адрес: Russia, SPb
Сообщений: 1,674
Вес репутации: 1729/81
Alex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant future
Отправить сообщение для Alex B. с помощью Skype™
По умолчанию Ответ: Скрипт линкера для PIC24H

спасибо
__________________
даташит читать до того , а не после
Alex B. вне форума   Ответить с цитированием
Ответ

Метки
c30, dspic, linker, pic24


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OS для PIC24H? timday Инструментарий 217 31.03.2010 12:18
Тестилка для принтеров killer258 Общетехнические вопросы 3 23.02.2008 20:33
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00
господа, где добыть для ознакомпления среду разработки для FUJITSU dynaco Общетехнические вопросы 2 04.06.2007 06:10
Дебаггер для PIC24H ChelMan Продукция MICROCHIP 8 15.03.2007 21:36


Часовой пояс GMT +3, время: 13:56.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot