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

AT91RM9200 - разбиение кода на быструю и медленную части

Имею в качестве среды среды разработки IAR 5.11 и отладочную плату AS-9200 (Argussoft) + JTAG SAM-ICE. вопрос в следующем:

1. Как содать проект в IAR-e таким образом, что несколько коротких функций (написаны ASM командами и добавлены в проект отдельными файлами) при загрузке были размещены во внутренней SRAM контроллера, а остальные функции (такие как main, функции работы с флешкой AT45DB642D, функции вывода информации на экран, и другие) были размещены в внешней SDRAM.

Функции, которые необходимо размещать в SRAM, критичны к времени выполнения, поэтому и ставиться такая задача. Все функции проекта не умещаются в SRAM. При явном указании размещения функций в файле *.icf файл прошивки контроллера весит свыше 500 мегабайт, что естественно неприемлемо :wacko: .

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

P.S. Вся прошивка весит где-то 30-50 кБ, поэтому варианты с установкой ОСи (любой) не предлагать - слишком высокая цена получается на реализацию платы (достаточно большое количество SDRAM).

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


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

P.S. Вся прошивка весит где-то 30-50 кБ, поэтому варианты с установкой ОСи (любой) не предлагать - слишком высокая цена получается на реализацию платы (достаточно большое количество SDRAM).

Тогда смысла нет задействовать SRAM. Если кэш включен, разницы в скорости Вы, скорее всего, не почувствуете.

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


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

И более того, если кеш включен, перепрыгивание между SRAM и SDRAM могут запросто понизить общее быстродействие.

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


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

И более того, если кеш включен

он же не делится если влючен нет внутренней SRAM

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


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

он же не делится если влючен нет внутренней SRAM

Вы путаете, SRAM при включенном кэше никуда не денется.

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


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

он же не делится если влючен нет внутренней SRAM

 

кеш покрывает все доступное адресное пространство процессора, а какие области делать кешируемые, какие нет - в Translation Table прописывается.

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


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

Время перепрыгивания из функций SDRAM в функции SRAM мне не важно. Необходимо, чтобы функции расположенные в SRAM выполнялись со стабильной скоростью, которая должна быть не менее предварительной определённой. При отладке этих фунций без остального содержимого программы их выполнение по времени было на грани необходимого для нормальной работы. Надеюсь я понятно выразился. А насчёт кэша идея хорошая - попробую на днях (про Translation Table почитаю в pdf-нике на AT91RM9200).

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


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

про Translation Table в pdf-нике на AT91RM9200 ничего нет. Это написано в Technical Reference Manual на ARM920T, например, который можно на сайте ARM найти. Идея добиться стабильной скорости работы процедуры - идея фикс. У вас что, прерываний в системе вообще нет? Даже если вы на время вызова функции сделаете это в критической секции (с запрещенными прерываниями), то даже время запрета прерывания нестабильно по времени.

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


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

про Translation Table в pdf-нике на AT91RM9200 ничего нет. Это написано в Technical Reference Manual на ARM920T, например, который можно на сайте ARM найти. Идея добиться стабильной скорости работы процедуры - идея фикс. У вас что, прерываний в системе вообще нет? Даже если вы на время вызова функции сделаете это в критической секции (с запрещенными прерываниями), то даже время запрета прерывания нестабильно по времени.

 

Насчет pdf спасибо. А скорость выполнения при отладке (загрузка программы через JTAG) стабильная. Если честно я даже забыл прерывания включить. Прерывание наверное будет одно - для USART-a.

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


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

кеш покрывает все доступное адресное пространство процессора, а какие области делать кешируемые, какие нет - в Translation Table прописывается.

А какой смысл в кеше на внутреннюю SRAM которая и так full speed ?

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


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

А какой смысл в кеше на внутреннюю SRAM которая и так full speed ?

Без кэша будут потеряны преимущества псевдогарвадовости ARM920. Т.е. из внутренней SRAM без кэширования программа будет выполняться медленнее.

 

Необходимо, чтобы функции расположенные в SRAM выполнялись со стабильной скоростью, которая должна быть не менее предварительной определённой. При отладке этих фунций без остального содержимого программы их выполнение по времени было на грани необходимого для нормальной работы.

Можете залочить их в кэше, тогда гарантированно не будут возникать cache-miss'ы.

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


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

Вы путаете, SRAM при включенном кэше никуда не денется.

точно? а то я начал уже забывать, недавно у меня клиент не смог из u-boot-а стартонуть програмку из внутренней SRAM. Типа написал програмульку, загрузил ее по xмодему - работает, запустил u-boot загрузил по кермиту или както еще в SRAM, дал командочку go - работает, записал во flash, установил командочку загрузить образ из flashа (тоже в SRAM) - не работает, единственное отличие по моей памяти что перед bootm включался кэш (что ядро стартонуло на максимальной скорости) а перед командой go нет. Симптоматика была такая, впрочем надо посмотреть.

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


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

Кэш на ARM920 это принадлежность ядра, использовать его в качестве обычной памяти невозможно. SRAM висит отдельно. Так что у Вашего клиента проблема в чем-то еще.

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


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

точно? а то я начал уже забывать, недавно у меня клиент не смог из u-boot-а стартонуть програмку из внутренней SRAM. Типа написал програмульку, загрузил ее по xмодему - работает, запустил u-boot загрузил по кермиту или както еще в SRAM, дал командочку go - работает, записал во flash, установил командочку загрузить образ из flashа (тоже в SRAM) - не работает, единственное отличие по моей памяти что перед bootm включался кэш (что ядро стартонуло на максимальной скорости) а перед командой go нет. Симптоматика была такая, впрочем надо посмотреть.

 

Вот и я наступал на эти грабли.

Инвалидить кэш надо при включении в своей программе, чтобы не зависеть от того был включен кеш в bootloader-е или нет.

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


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

Инвалидить кэш

обычно так и делают когда есть к нему прямой доступ, иногда требуемый кусочек кода переписывают туда при включении, но в u-boot не очень много кода связанного с кэшем, потом после ресета он то, наверное, инвалидный.

По идее так должно быть. У клиента симптоматика была следующая, он дает командочку go - работает, потом кнопочкой ресетит и снова дает go он работает - программка во внутренней ram, потом выключением питания ресетит - там уже срабатывает командочка bootm - не работает. Я тормознулся , напряг память как там сделано - вроде перед bootm он включается да и после включения питания он доложен быть сброшенным.

Изменено пользователем dch

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


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

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

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

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

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

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

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

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

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

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