реклама на сайте
подробности

 
 
> Проблема вывода длинных PCM-аудио фрагментов на LPC 2366
lavrik
сообщение Jan 18 2015, 19:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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).

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mantech
сообщение Jan 18 2015, 19:59
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(lavrik @ Jan 18 2015, 22:12) *
Если массив меньше 32 кб - все компилируется и играет, но если больше 32 кб - компилятор выдает ошибку переполнения, т.е. при работе с массивом программа помещает его полностью в оперативку. Но главная загвоздка в том, что даже если не использовать массив больше 32 кб, а просто объявить его, то компилятор все-равно ругается точно так же.


Во первых - глупо копировать в оперативку даные из флеша, особенно если это не программа,а звук или что другое. Во вторых, в оперативке еще должен храниться стек и глобальные переменные, если копируете массив в размер оперативки, то куда складывать их?? Должен ругаться линкер на это безобразие biggrin.gif
Если все равно будете биться об стенку, чтоб линкер не ругался, объявите массив, как "no init", но это все равно не правильно, ибо данные нужно читать их флеша напрямую, благо в армах линейное адр. пространство...

Цитата(lavrik @ Jan 18 2015, 22:12) *
Однако все равно непонятно, как записать сэмпл звуковой, допустим в 64 кб, но чтобы компилятор принял его? Другими словами как ещё, кроме массива, можно записать эти самые 64 кб в код?

Работаю в KEIL, при компиляции выдает вот что:


На счет кейла не знаю, в иаре есть такая штука pragma location=адрес флеша, куда пишете данные... В кейле должно быть что-то подобное.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 14:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016