Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 20.11.2009, 10:55  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

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

Как у меня все устроено. Имеется некоторый девайс, который читает векторные анимации(или просто мультики) с карты памяти и выводит их на ШИМовый ЦАП(2 выхода - X и Y). Надо обеспечить боле менее плавное воспроизведение, чтоб если карта занята то воспроизведение не прерывалось(а она становится занятой после считывания каждого сектора - готовит новые данные). Два буфера, функция заполнения буфера и функция считывания информации с буфера. Считывание буфера происходит по переполнению счетчика первого таймера(~10КГц).
Алгоритм работы. При открытии файла заполняются оба буфера FIFO1 и FIFO2. После этого активируется прерывание, которое разрешает считывание первого буфера - FIFO1. При возникновении прерывания вызывается подпрограмма считывания буфера, при каждом входе считывается только одна точка(3 байта). Мы ждем пока не опустошится первый буфер. Когда он станет пуст, то на воспроизведение переключается второй буфер - FIFO2, а FIFO1 автоматически начинает заполняться(если не ошибаюсь, называется пинг-понг буфер). Итак все по кругу, пока не будет достигнут конец файла.
Проблема в том, что при воспроизведении параллельно с полезной информацией в некоторых местах начинает выводится грязь(результат я контролирую на экране осциллографа). Может быть один буфер начинает наезжать на другой, но это проявляется только начиная с определенных скоростей воспроизведения. Грязи быть не должно,а если оба буфера оказались пусты(конец файла, не хватает быстродействия процессора и т.д.), то прерывания отключатся и система ожидает заполнения обоих буферов и только потом продолжает воспроизведение. Ошибки работы файловой системы сразу исключаю т.к без буферизации воспроизводится без грязи.
Уже у меня нет мыслей что бы могло стать причиной такого странного поведения программы.
Вот основной код на Си с довольно подробными комментами, функции буферизации находятся в файле stream_play.c Гляньте плиз, может у кого появятся какие-то идеи.
Вложения:
Тип файла: rar ildaplay.rar (6.7 Кб, 83 просмотров)
Реклама:
uk8amk вне форума  
Непрочитано 22.11.2009, 00:39  
Gura
Частый гость
 
Регистрация: 25.08.2006
Сообщений: 32
Сказал спасибо: 7
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Gura на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

посмотрите этот проект http://home.arcor.de/g.fink/tinyplayerm88.zip
Gura вне форума  
Непрочитано 23.11.2009, 15:10  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

В Вашем случае, мне кажется, так и проситься кольцевой буфер. Возьмем его для упрощения (чтобы не контролировать переполнение указателей) 256 байт.
Берем указателя - 2 - один для чтения, другой для записи, байтовых.
В случае освобождения данных их кольца инкрементируем значение указателя чтения, а при записи в кольцо контролируем, не равны ли они друг другу (чтобы не наехать), записываем, инкрементируем указатель записи.
проект для иллюстрации в приложении.
Вложения:
Тип файла: rar m_48.rar (1.22 Мб, 125 просмотров)
__________________
warez
urry вне форума  
Сказали "Спасибо" urry
uk8amk (24.11.2009)
Непрочитано 23.11.2009, 18:38  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

urry
Поковырял ваш код. Идея понравилась. Попробую сделать аналогичное в своем приложении.
uk8amk вне форума  
Непрочитано 24.11.2009, 15:08  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Заработало. И очень даже хорошо заработало. Прокрутил несколько файлов, все ОК. Только в функцию считывания, вызываемую из прерывания, пришлось тоже добавить проверку на наезжание. Иначе как-то нестабильно работало, файлы слишком рано закрывались.
У меня такой вопрос. У вас проверка реализована так:
while(!(pos_read ^ pos_write));
В моем случае это числа типа unsigned int. Я сделал так:
while(pos_read == pos_write);
и компилятор(CVAVR 1258, оптимизация по скорости) сказал что в последнем случае надо меньше флеша. А реально как быстрее будет?
Вложения:
Тип файла: rar stream.rar (838 байт, 79 просмотров)
uk8amk вне форума  
Непрочитано 24.11.2009, 16:02  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Выбрать буфер со значением, кратным 2. Тогда обычной маской можно закрыть указатель, не
if(i›(FIFO_LEN-1))
pos_write=0;
else
pos_write=(--i);
а
#define FIFO_LEN 512
#define FIFO_MASK FIFO_LEN -1
pos_write=--i & FIFO_MASK;
как-то так.
И версию компилятора обновить попробовать...
__________________
warez
urry вне форума  
Непрочитано 24.11.2009, 18:49  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Сообщение от urry Посмотреть сообщение
Выбрать буфер со значением, кратным 2. Тогда обычной маской
Не получится. У меня размер буфера должен быть кратен трем т.к. за один раз добавляется или считывается по 3 байта.
uk8amk вне форума  
Непрочитано 15.01.2011, 13:17  
mortalcombat
Прохожий
 
Регистрация: 15.01.2011
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
mortalcombat на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Cyber_RAT,

Интересует работа с SD картами в быстром режиме. Вы можите поочь добрым советом? Давайте пообщаемся по Skype. Мой логин - plis200. иЛИ ПОЧТА - mortalcombat2000@mail.ru
mortalcombat вне форума  
Непрочитано 15.01.2011, 13:18  
mortalcombat
Прохожий
 
Регистрация: 15.01.2011
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
mortalcombat на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

plis2009
mortalcombat2000@mail.ru
mortalcombat вне форума  
Непрочитано 15.01.2011, 13:20  
mortalcombat
Прохожий
 
Регистрация: 15.01.2011
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
mortalcombat на пути к лучшему
По умолчанию Re: Пытаюсь работать с SD card. Нужна помощь

Cyber_RAT,


plis2009
mortalcombat2000@mail.ru
mortalcombat вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в поиске схемы novoaidar Электроника средств транспорта 9 07.10.2009 17:42
Схемотехника. Нужна помощь по ряду вопросов zzyaka Электроника - это просто 9 28.09.2009 11:16
[Решено] Нужна помощь с вопросами! Istwood Делимся опытом 4 20.09.2009 14:53
PCAD- нужна помощь. помогите открыть файл Pavelrb Proteus, KiCAD и другие ECAD 3 16.09.2009 17:23


Часовой пояс GMT +4, время: 13:52.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot