|
Проблема вывода длинных PCM-аудио фрагментов на LPC 2366 |
|
|
|
Jan 18 2015, 19:12
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 16-01-15
Пользователь №: 84 635

|
Здравствуйте форумчане! Прошу вашей помощи!
Столкнулся с проблемой при выводе звука на LPC 2366: в контроллере 32 кб оперативки, 256 флэш-памяти; звуковые фрагменты в hex-виде лежат в массиве. Если массив меньше 32 кб - все компилируется и играет, но если больше 32 кб - компилятор выдает ошибку переполнения, т.е. при работе с массивом программа помещает его полностью в оперативку. Но главная загвоздка в том, что даже если не использовать массив больше 32 кб, а просто объявить его, то компилятор все-равно ругается точно так же. Мне подсказали, что надо организовать буфер в оперативке. Однако все равно непонятно, как записать сэмпл звуковой, допустим в 64 кб, но чтобы компилятор принял его? Другими словами как ещё, кроме массива, можно записать эти самые 64 кб в код?
Работаю в KEIL, при компиляции выдает вот что:
compiling main.c... linking... .\1.axf: Error: L6406E: No space in execution regions with .ANY selector matching main.o(.data). .\1.axf: Error: L6407E: Sections of aggregate size 0x10c54 bytes could not fit into .ANY selector(s).
|
|
|
|
|
 |
Ответов
(1 - 9)
|
Jan 18 2015, 19:59
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(lavrik @ Jan 18 2015, 22:12)  Если массив меньше 32 кб - все компилируется и играет, но если больше 32 кб - компилятор выдает ошибку переполнения, т.е. при работе с массивом программа помещает его полностью в оперативку. Но главная загвоздка в том, что даже если не использовать массив больше 32 кб, а просто объявить его, то компилятор все-равно ругается точно так же. Во первых - глупо копировать в оперативку даные из флеша, особенно если это не программа,а звук или что другое. Во вторых, в оперативке еще должен храниться стек и глобальные переменные, если копируете массив в размер оперативки, то куда складывать их?? Должен ругаться линкер на это безобразие Если все равно будете биться об стенку, чтоб линкер не ругался, объявите массив, как "no init", но это все равно не правильно, ибо данные нужно читать их флеша напрямую, благо в армах линейное адр. пространство... Цитата(lavrik @ Jan 18 2015, 22:12)  Однако все равно непонятно, как записать сэмпл звуковой, допустим в 64 кб, но чтобы компилятор принял его? Другими словами как ещё, кроме массива, можно записать эти самые 64 кб в код?
Работаю в KEIL, при компиляции выдает вот что: На счет кейла не знаю, в иаре есть такая штука pragma location=адрес флеша, куда пишете данные... В кейле должно быть что-то подобное.
|
|
|
|
|
Jan 18 2015, 20:38
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 16-01-15
Пользователь №: 84 635

|
Просто не знаю какой конкретно инструментарий использовать, чтобы записать в память  Только въезжаю в эту микроконтроллерную тему Спасибо за прояснение ситуации!)
|
|
|
|
|
Jan 18 2015, 20:54
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(lavrik @ Jan 18 2015, 23:38)  Просто не знаю какой конкретно инструментарий использовать, чтобы записать в память рекомендую начать с ознакомления с линкером. Любая прога помещается в определенную область памяти, которую определяют настройки линкера, прога и все, что не модифицируется - read only идет во флеш, переменные, массивы, стек и пр - в read write, т.е. в RАМ. По умолчанию, все массивы, которые создаете пишутся в read write, соотв все, что больше размера оперативки вызывает ошибку, нужно определить соотв. секцию, задать массив в ней и указать линкеру, чтоб поместил ее в read only. После этого, когда прога запустится, читать данные, начиная с указанного адреса. Все просто, но разобраться в этом нужно...
|
|
|
|
|
Jan 19 2015, 07:31
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Golikov A. @ Jan 19 2015, 01:18)  сделайте С файл кнопкой мыши в кейле-прожект-визарде Если там есть такое дело - можно попробовать, у меня в иаре визард какой-то убогий код делал - ничего не работало, плюнул, решил ручками... Дольше, конечно, но понял, как все устроено Цитата(Golikov A. @ Jan 19 2015, 01:18)  А вы далеко от правильного пути, вам файлик линкера с текстом непохожим ни на что человеческое курочить надо... Там, в кейле, действительно все так запущено?? Цитата(Golikov A. @ Jan 19 2015, 01:18)  Объявления массива как const тоже должно помочь. Это дельная мысль, че-то я ее упустил  Попробуйте объявить массив, скажем 64к, в виде константного, если вменяемый компилятор, он может поместить его в ром автоматом...
|
|
|
|
|
Jan 19 2015, 07:54
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Там, в кейле, действительно все так запущено?? я слабо помню как выглядит линкер скрипт от IAR, но помню что не особо отличается от кейловского. Те же секции, скобочки, точки, в целом разобраться можно, но.... в кейле сделаны мего удобные визарды, вот есть у вас программка и острое желание какие-то функции запустить из RAM, тыкнул правой кнопкой в файлик, вызвал опции, и перепихал их в рам, передумал, все обратно оттыкал и свободен... а среда сама все сделает, разместить, проинициализирует, удобно... после этого руками линкер скрипт ковырять становиться не удобно  все в сравнении как говориться...
|
|
|
|
|
Jan 19 2015, 08:33
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 16-01-15
Пользователь №: 84 635

|
Всем спасибо большое! Поставил const, в свойствах Си-файла поставил в IROM1 и все заработало!
|
|
|
|
|
Jan 19 2015, 15:24
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(mantech @ Jan 19 2015, 10:31)  Там, в кейле, действительно все так запущено?? "там в кейле" необходимо и достаточно объявить этот несчастный массив как const и ничего больше не трогать. А "мегоудобные визарды" ничерта не работают, если хранить во флеше настройки, загрузчик и прочие нестандартные извращения. Впрочем, по статьям на кейл.ком конфигурация линкера пишется легко и непринуждённо, главное - понимать, чего хочется :-)
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|