usercod 0 14 февраля, 2013 Опубликовано 14 февраля, 2013 · Жалоба Начал изучать серию С2000 на примере tms320f28027. Появился вопрос. В чем принципиальная разница запуска программы из RAM и Flash? Хотелось бы узнать в чем преимущества и недостатки каждого способа. Если есть на примете "умные книги", где это разъясняется, просьба поделиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beaRTS 0 14 февраля, 2013 Опубликовано 14 февраля, 2013 · Жалоба Если есть на примете "умные книги", где это разъясняется, просьба поделиться. посмотри книгу из сообщения по ссылке Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
usercod 0 14 февраля, 2013 Опубликовано 14 февраля, 2013 · Жалоба посмотри книгу из сообщения по ссылке Да, книга хорошая, но в ней не объясняется почему есть необходимость выгружать код в ОЗУ. Из общих представлений я понимаю, что время доступа будет меньше, если функция крутится в ОЗУ. Хотелось бы понять концептуально в каких случаях программу нужно компилировать в CCS под FLASH или RAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MK2 0 14 февраля, 2013 Опубликовано 14 февраля, 2013 · Жалоба мое мнение: это атавизм из прошлого... ядро довольно древнее, флешки были тогда не долговечные + были популярны однократно программируемые чипы PS. код из ОЗУ не всегда быстрее выполняется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Enthusiast 0 14 февраля, 2013 Опубликовано 14 февраля, 2013 · Жалоба Из собственного опыта: 1. Код из флэшки не нужно копировать в ОЗУ для последующего выполнения при включении микроконтроллера, время запуска будет меньше; 2. Код из флэшки более помехоустойчив, чем из ОЗУ, даже внутреннего; 3. Код из флэшки выполняется примерно в три раза медленнее, чем из внутреннего ОЗУ; 4. Флэш-памяти программ и данных просто в разы больше, чем внутреннего ОЗУ. Из флэшки можно выполнять более объемные программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TSS 0 15 февраля, 2013 Опубликовано 15 февраля, 2013 · Жалоба В чем принципиальная разница запуска программы из RAM и Flash? Хотелось бы узнать в чем преимущества и недостатки каждого способа. Когда важно время выполнения (а для таких процов это важно чуть менее чем всегда), использование ОЗУ очень рекомендуется. Как уже написали выше, разница по скорости в несколько раз. На работе обычно делаем все алгоритмы вычислений в ОЗУ, во флешке оставляем только функции инициализации и прочие некритичные вещи. Очень важно при этом размещать математические библиотеки в ОЗУ, такие как FPUfastRTS, IQmath и CLAmath. Библиотека math.h тоже по-умолчанию выполняется из флешки, поэтому очень медленно. P.S. Но вообще говоря, разница очень сильно зависит от тактовой частоты ядра. Если для 150МГц она огромна, то для частоты скажем 50МГц всё уже не так очевидно, поскольку там будут меняться тайминги работы Flash памяти. Посмотрите для понимания сути табличку под названием "Minimum Required Flash/OTP Wait-States at Different Frequencies" в даташите на свой проц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
usercod 0 15 февраля, 2013 Опубликовано 15 февраля, 2013 · Жалоба Большое спасибо за ответы. Извините если вопрос покажется глупым, но для чего именно нужна эта функция? Необходимо ли ее использовать при написания собственной программы? // External symbols created by the linker cmd file // DSP28 examples will use these to relocate code from one LOAD location // in Flash to a different RUN location in internal RAM extern Uint16 RamfuncsLoadStart; extern Uint16 RamfuncsLoadSize; extern Uint16 RamfuncsRunStart; // If running from flash copy RAM only functions to RAM #ifdef _FLASH memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize); #endif Turnaev Sergey, спасибо, очень доходчиво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TSS 0 15 февраля, 2013 Опубликовано 15 февраля, 2013 · Жалоба Ну как известно, ничего в ОЗУ само не появляется, поэтому исполняемая в ОЗУ функция сначала в неё копируется из Flash. И функция memcpy как раз для этих целей используется. Что конкретно копировать, задаётся в файле CMD, в документации например на библиотеку FPUfastRTS описывается, как это сделать. Чтобы свои функции разместить в ОЗУ необходимо использовать pragma вида: #pragma CODE_SECTION(myRAMfunc, "ramfuncs"); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
usercod 0 15 февраля, 2013 Опубликовано 15 февраля, 2013 · Жалоба Turnaev Sergey, огромное спасибо за ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться