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

Объявить неприкасаемый регион памяти

требуется объявить "неприкасаемый" регион памяти - тоесть чтоб линковщик не размещал там никаких функций/данных/стеков

для собственных нужд...

 

напишите плиз фрагмент объявления такого сегмента(секции)

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


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

Если хотите использовать какой-либо регион в своих целях, то просто опишите эти цели линкеру, ничего лишнего он туда не положит.

А если хотите совсем неприкасаемый регион, то линкеру можно просто не говорить о его существовании :)

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


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

:)

 

Объяви массив нужной тебе длины и скажи линковщику куда его положить.

Обещаю, больше линковщик с ним ничего делать не будет.

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


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

Объяви массив нужной тебе длины и скажи линковщику куда его положить.

 

у меня Keil uv 3.3 там директива __at не работает: char P[0x1000] __at 0x00201000 - выдаёт ошибку!

 

языком скрипта реалвьюшного линкера не владею, посему прошу участников написать фрагмент sct-файла, чтоб зарезервировать к примеру адреса : 0x00201000...0x002010FF

 

для арм7 прошу дописать Sct-файл:

 

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x00100000 0x00010000  { ; load region
  ER_IROM1 0x00100000  {      ; load address = execution address
   *.o (RESET, +First)
   * (+RO)
  }
  RW_IRAM1 0x00200000 0x00004000  { ; RW data
   * (+RW +ZI)
  }
}

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


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

языком скрипта реалвьюшного линкера не владею, посему прошу участников написать фрагмент sct-файла, чтоб зарезервировать к примеру адреса : 0x00201000...0x002010FF

Вот так просто выгрызать 256 посередине региона не лучшая идея - замучаетесь потом секции распихивать, и уж без владения линкерным скриптом никак.

А выделить кусок в начале или в конце памяти можно достаточно спокойно - нужно лишь исправить адрес и длину execution region'а RW_IRAM1. И инициализацию стека еще проверить, чтобы не было пересечений.

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


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

Вот так просто выгрызать 256 посередине региона не лучшая идея - замучаетесь потом секции распихивать, и уж без владения линкерным скриптом никак.

Вот и у меня возникала потребность сделать "дыру" в памяти. Помнится, линкер от IAR делал это без проблем: сам раскидывал секции по обе стороны "дыры". А вот у RealView такой фичи не вижу, только ручная сортировка секций. Или я плохо искал? Просьба знающим людям прокомментировать.

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


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

В Keil это сделать просто. Заходим в опции проекта, выбираем вкладку Target и корректируем поля в Read/Only Memory Areas. Таким образом сообщаем Линковщику где можно использовать FLASH и по каким адресам.

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


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

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

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

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

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

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

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

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

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

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