Antokha 0 27 октября, 2008 Опубликовано 27 октября, 2008 · Жалоба Имею в качестве среды среды разработки IAR 5.11 и отладочную плату AS-9200 (Argussoft) + JTAG SAM-ICE. вопрос в следующем: 1. Как содать проект в IAR-e таким образом, что несколько коротких функций (написаны ASM командами и добавлены в проект отдельными файлами) при загрузке были размещены во внутренней SRAM контроллера, а остальные функции (такие как main, функции работы с флешкой AT45DB642D, функции вывода информации на экран, и другие) были размещены в внешней SDRAM. Функции, которые необходимо размещать в SRAM, критичны к времени выполнения, поэтому и ставиться такая задача. Все функции проекта не умещаются в SRAM. При явном указании размещения функций в файле *.icf файл прошивки контроллера весит свыше 500 мегабайт, что естественно неприемлемо . Всех участников форума прошу предложить хоть какие-то варианты - мой мозг уже разрывается на куски, мысли закончились. P.S. Вся прошивка весит где-то 30-50 кБ, поэтому варианты с установкой ОСи (любой) не предлагать - слишком высокая цена получается на реализацию платы (достаточно большое количество SDRAM). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 27 октября, 2008 Опубликовано 27 октября, 2008 · Жалоба P.S. Вся прошивка весит где-то 30-50 кБ, поэтому варианты с установкой ОСи (любой) не предлагать - слишком высокая цена получается на реализацию платы (достаточно большое количество SDRAM). Тогда смысла нет задействовать SRAM. Если кэш включен, разницы в скорости Вы, скорее всего, не почувствуете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 28 октября, 2008 Опубликовано 28 октября, 2008 · Жалоба И более того, если кеш включен, перепрыгивание между SRAM и SDRAM могут запросто понизить общее быстродействие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dch 0 28 октября, 2008 Опубликовано 28 октября, 2008 · Жалоба И более того, если кеш включен он же не делится если влючен нет внутренней SRAM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 28 октября, 2008 Опубликовано 28 октября, 2008 · Жалоба он же не делится если влючен нет внутренней SRAM Вы путаете, SRAM при включенном кэше никуда не денется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 28 октября, 2008 Опубликовано 28 октября, 2008 · Жалоба он же не делится если влючен нет внутренней SRAM кеш покрывает все доступное адресное пространство процессора, а какие области делать кешируемые, какие нет - в Translation Table прописывается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Antokha 0 28 октября, 2008 Опубликовано 28 октября, 2008 · Жалоба Время перепрыгивания из функций SDRAM в функции SRAM мне не важно. Необходимо, чтобы функции расположенные в SRAM выполнялись со стабильной скоростью, которая должна быть не менее предварительной определённой. При отладке этих фунций без остального содержимого программы их выполнение по времени было на грани необходимого для нормальной работы. Надеюсь я понятно выразился. А насчёт кэша идея хорошая - попробую на днях (про Translation Table почитаю в pdf-нике на AT91RM9200). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 28 октября, 2008 Опубликовано 28 октября, 2008 · Жалоба про Translation Table в pdf-нике на AT91RM9200 ничего нет. Это написано в Technical Reference Manual на ARM920T, например, который можно на сайте ARM найти. Идея добиться стабильной скорости работы процедуры - идея фикс. У вас что, прерываний в системе вообще нет? Даже если вы на время вызова функции сделаете это в критической секции (с запрещенными прерываниями), то даже время запрета прерывания нестабильно по времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Antokha 0 28 октября, 2008 Опубликовано 28 октября, 2008 · Жалоба про Translation Table в pdf-нике на AT91RM9200 ничего нет. Это написано в Technical Reference Manual на ARM920T, например, который можно на сайте ARM найти. Идея добиться стабильной скорости работы процедуры - идея фикс. У вас что, прерываний в системе вообще нет? Даже если вы на время вызова функции сделаете это в критической секции (с запрещенными прерываниями), то даже время запрета прерывания нестабильно по времени. Насчет pdf спасибо. А скорость выполнения при отладке (загрузка программы через JTAG) стабильная. Если честно я даже забыл прерывания включить. Прерывание наверное будет одно - для USART-a. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 28 октября, 2008 Опубликовано 28 октября, 2008 · Жалоба кеш покрывает все доступное адресное пространство процессора, а какие области делать кешируемые, какие нет - в Translation Table прописывается. А какой смысл в кеше на внутреннюю SRAM которая и так full speed ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 29 октября, 2008 Опубликовано 29 октября, 2008 · Жалоба А какой смысл в кеше на внутреннюю SRAM которая и так full speed ? Без кэша будут потеряны преимущества псевдогарвадовости ARM920. Т.е. из внутренней SRAM без кэширования программа будет выполняться медленнее. Необходимо, чтобы функции расположенные в SRAM выполнялись со стабильной скоростью, которая должна быть не менее предварительной определённой. При отладке этих фунций без остального содержимого программы их выполнение по времени было на грани необходимого для нормальной работы. Можете залочить их в кэше, тогда гарантированно не будут возникать cache-miss'ы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dch 0 29 октября, 2008 Опубликовано 29 октября, 2008 · Жалоба Вы путаете, SRAM при включенном кэше никуда не денется. точно? а то я начал уже забывать, недавно у меня клиент не смог из u-boot-а стартонуть програмку из внутренней SRAM. Типа написал програмульку, загрузил ее по xмодему - работает, запустил u-boot загрузил по кермиту или както еще в SRAM, дал командочку go - работает, записал во flash, установил командочку загрузить образ из flashа (тоже в SRAM) - не работает, единственное отличие по моей памяти что перед bootm включался кэш (что ядро стартонуло на максимальной скорости) а перед командой go нет. Симптоматика была такая, впрочем надо посмотреть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 29 октября, 2008 Опубликовано 29 октября, 2008 · Жалоба Кэш на ARM920 это принадлежность ядра, использовать его в качестве обычной памяти невозможно. SRAM висит отдельно. Так что у Вашего клиента проблема в чем-то еще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zhz 0 29 октября, 2008 Опубликовано 29 октября, 2008 · Жалоба точно? а то я начал уже забывать, недавно у меня клиент не смог из u-boot-а стартонуть програмку из внутренней SRAM. Типа написал програмульку, загрузил ее по xмодему - работает, запустил u-boot загрузил по кермиту или както еще в SRAM, дал командочку go - работает, записал во flash, установил командочку загрузить образ из flashа (тоже в SRAM) - не работает, единственное отличие по моей памяти что перед bootm включался кэш (что ядро стартонуло на максимальной скорости) а перед командой go нет. Симптоматика была такая, впрочем надо посмотреть. Вот и я наступал на эти грабли. Инвалидить кэш надо при включении в своей программе, чтобы не зависеть от того был включен кеш в bootloader-е или нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dch 0 29 октября, 2008 Опубликовано 29 октября, 2008 (изменено) · Жалоба Инвалидить кэш обычно так и делают когда есть к нему прямой доступ, иногда требуемый кусочек кода переписывают туда при включении, но в u-boot не очень много кода связанного с кэшем, потом после ресета он то, наверное, инвалидный. По идее так должно быть. У клиента симптоматика была следующая, он дает командочку go - работает, потом кнопочкой ресетит и снова дает go он работает - программка во внутренней ram, потом выключением питания ресетит - там уже срабатывает командочка bootm - не работает. Я тормознулся , напряг память как там сделано - вроде перед bootm он включается да и после включения питания он доложен быть сброшенным. Изменено 29 октября, 2008 пользователем dch Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться