Перейти к содержанию
    

Что значит "найти"? Последовательное чтение файла предполагает следующие переменные:

 

var1 - Смещение в текущем секторе

var2 - Номер сектора в кластере (может быть склеено вместе с п.1)

var3 - Номер текущего кластера

 

Собственно алгоритм последовательного чтения представляет из себя:

1. Чтение текущего сектора, определяемого как var2+clust_base+var3*количество_секторов_в_кластере. Или части сектора, тогда надо использовать еще и var1.

2. Проверка на невыход за пределы текущего кластера переменных 1 и 2, если произошел выход, то var3=FAT(var3) и var1=0, var2=0. И опять сначала. Процедура, реализующая получение содержимого таблицы FAT по номеру текущего кластера для FAT16/FAT31 суть всего-лишь чтение одного сектора FAT.

 

Какие же проблемы?

 

сектор сам по себе 512 байт.

надо и себе озу оставить. если там длинные имена - байт 100 под имя. в опчем разве что полсектора читать.

соответственно, возрастает сложность кода.

и все влезет в 1 Килобайт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сектор сам по себе 512 байт.

надо и себе озу оставить. если там длинные имена - байт 100 под имя. в опчем разве что полсектора читать.

соответственно, возрастает сложность кода.

и все влезет в 1 Килобайт?

100 байт под LFN не маловато будет? :)

 

А вообще RST7 вёл речь про чтение секторов без поддержки LFN...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

100 байт под LFN не маловато будет? :)

 

А вообще RST7 вёл речь про чтение секторов без поддержки LFN...

Вообще топик не про файловую систему, а про STM32 MP3 :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно "маловато".. Нужно 2*260.

Точно, там же юникод ещё... :)

 

Вообще топик не про файловую систему, а про STM32 MP3 :rolleyes:

Вот такие вот мы флудеры... B)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно "маловато".. Нужно 2*260.

 

ну маловато, но идея была - сделать кастрированную читалку ФАТ.

Если там всего 512 байт в VLSI - че делать?

 

все - каюк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну маловато, но идея была - сделать кастрированную читалку ФАТ.

Если там всего 512 байт в VLSI - че делать?

 

все - каюк.

Для чего длинные имена в mp3 плеере на VLSI?

Я думаю чтение ID3 тэгов сделать куда разумнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если там всего 512 байт в VLSI - че делать?

все - каюк.

 

Блин, да курните вы поглубже про внутренности VLSI. Во-первых, там есть еще входная очередь размером в 2К. Пока не играем - она, понятное дело, пуста. Раскладывайте там свои причиндалы для разбора LFN. А когда плей - прямо читайте сектора в очередь да и все.

 

Так уж и быть. Я тут скоро один проектик с этой VLSI буду делать, слеплю вам маленький плейер.

 

 

 

А есть по ним инфа?

 

/*

 This is an example program that shows how to extract MP3 ID3v1 tags.
 It is written in standard ANSI C and can be compiled with any working
 C compiler.

 Usage: "id3tag file1.mp3 [file2.mp3 [...]]"

 Author: Henrik Herranen, VLSI Solution, 2000-07-21

*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



/*

 Different genres are described below. If it is felt that these take
 too much space from a microcontroller, the whole list may be thrown
 away since the genre information is used wrong most of the time anyway.

*/
#define GENRES 148

char *genres[GENRES] = {
 "Blues", "Classic Rock", "Country", "Dance",
 "Disco", "Funk", "Grunge", "Hip-Hop",
 "Jazz", "Metal", "New Age", "Oldies",
 "Other", "Pop", "R&B", "Rap",
 "Reggae", "Rock", "Techno", "Industrial",
 "Alternative", "Ska", "Death Metal", "Pranks",
 "Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop",
 "Vocal", "Jazz+Funk", "Fusion", "Trance",
 "Classical", "Instrumental", "Acid", "House",
 "Game", "Sound Clip", "Gospel", "Noise",
 "AlternRock", "Bass", "Soul", "Punk",
 "Space", "Meditative", "Instrumental Pop", "Instrumental Rock",
 "Ethnic", "Gothic", "Darkwave", "Techno-Industrial",
 "Electronic", "Pop-Folk", "Eurodance", "Dream",
 "Southern Rock", "Comedy", "Cult", "Gangsta",
 "Top 40", "Christian Rap", "Pop/Funk", "Jungle",
 "Native American", "Cabaret", "New Wave", "Psychadelic",
 "Rave", "Showtunes", "Trailer", "Lo-Fi",
 "Tribal", "Acid Punk", "Acid Jazz", "Polka",
 "Retro", "Musical", "Rock & Roll", "Hard Rock",
 "Folk", "Folk/Rock", "National folk", "Swing",
 "Fast-fusion", "Bebob", "Latin", "Revival",
 "Celtic", "Bluegrass", "Avantgarde", "Gothic Rock",
 "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock",
 "Big Band", "Chorus", "Easy Listening", "Acoustic",
 "Humour", "Speech", "Chanson", "Opera",
 "Chamber Music", "Sonata", "Symphony", "Booty Bass",
 "Primus", "Porn Groove", "Satire", "Slow Jam",
 "Club", "Tango", "Samba", "Folklore",
 "Ballad", "Powder Ballad", "Rhythmic Soul", "Freestyle",
 "Duet", "Punk Rock", "Drum Solo", "A Capella",
 "Euro-House", "Dance Hall", "Goa", "Drum & Bass",
 "Club House", "Hardcore", "Terror", "Indie",
 "BritPop", "NegerPunk", "Polsk Punk", "Beat",
 "Christian Gangsta", "Heavy Metal", "Black Metal", "Crossover",
 "Contemporary C", "Christian Rock", "Merengue", "Salsa",
 "Thrash Metal", "Anime", "JPop", "SynthPop"
};



/*

 Here is the main program. The program is called by giving 1 or more
 MP3 files as command line arguments.

 Example:
 mp3tag mysong.mp3 othersong.mp3

*/


int main(int argc, char **argv) {
 int i;
 /* 128 bytes needed for raw ID3 data */
 char id3[128];

 for (i=1; i<argc; i++) {
   if (!strcmp(argv[i], "-h")) {
     printf("Usage: %s file1.mp3 [file2.mp3 [...]]\n", argv[0]);
     exit(EXIT_SUCCESS);
   } else {
     FILE *fp = fopen(argv[i], "rb");

     if (!fp) {
printf("Couldn't open file %s\n", argv[i]);
exit(EXIT_FAILURE);
     }

     /* Read last 128 bytes of the file, if we can */

     if (fseek(fp, -128, SEEK_END) || fread(id3, 128, 1, fp) != 1) {
printf("Couldn't jump/read in file %s\n", argv[i]);
exit(EXIT_FAILURE);
     }
     fclose(fp);

     /* Now we have read the last 128 bytes and it's time to see if we
 have some ID3 there or not. A valid ID3 tag has the characters
 'T', 'A', and 'G' as its 3 identifying characters. */

     if (strncmp(id3, "TAG", 3)) {
printf("File \"%s\" doesn't have an ID3 tag\n\n", argv[i]);
     } else {
unsigned char *s = id3+3;
char title[31];
char artist[31];
char album[31];
char year[5];
char comment[31];
char genre[31];

/* Id3 tag elements don't necessarily end in a '\0' if they
   occupy the full 30 character space. Thus, we'll have to
   nul-terminate all strings just to be sure. */
strncpy(title, s, 30);
title[30] = '\0';
s += 30;

strncpy(artist, s, 30);
artist[30] = '\0';
s += 30;

strncpy(album, s, 30);
album[30] = '\0';
s += 30;

strncpy(year, s, 4);
year[4] = '\0';
s += 4;

strncpy(comment, s, 30);
comment[30] = '\0';
s += 30;

/* The genre field is not encoded as a string, but just one byte
   that indexes the decoding table. If memory is too expensive,
   the whole field may be ignored or just shown as a number. */
if (*s >= GENRES)
  strcpy(genre, "Unknown");
else
  strcpy(genre, genres[*s]);

/* And now the final printing */
printf("File \"%s\":\n", argv[i]);
printf("Title  : %-30s  Artist: %s\n", title, artist);
printf("Album  : %-30s  Year  : %4s\n", album, year);
printf("Comment: %-30s  Genre : %s\n\n", comment, genre);
     }
   }
 }

 return EXIT_SUCCESS;
}

 

И вообще, горячие финские парни все придумали за нас

 

http://www.vlsi.fi/en/support/evaluationbo...protoboard.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А кто-нить пробовал отлаживать проги для vs-ок ? Нормальный отладчик там за бабки, а сидеть в командной строке после того же Кейла как-то ломает. ИМХО для этих целей прямо просится str911fam44 - стоит недорого, памяти и производительности выше крыши для этой задачи, I2S легко реализуется на таймере и ssp.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для чего длинные имена в mp3 плеере на VLSI?

Я думаю чтение ID3 тэгов сделать куда разумнее.

Для плеера LFN нафиг не нужны.

Мне для универсального диска на карточке это понадобится.

 

А кто-нить пробовал отлаживать проги для vs-ок ? Нормальный отладчик там за бабки, а сидеть в командной строке после того же Кейла как-то ломает. ИМХО для этих целей прямо просится str911fam44 - стоит недорого, памяти и производительности выше крыши для этой задачи, I2S легко реализуется на таймере и ssp.

Что, прямо таки девятый арм необходим? А седьмые не подходят?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что, прямо таки девятый арм необходим? А седьмые не подходят?

Так цена почти одинаковая, а запас по памяти и производительности всегда приятно иметь.

Сейчас mp3, а завтра flac захочется и т.д.

 

Кстати, требования для Helix MP3 Decoder 320 Kbps:

ARM7TDMI - 30 MHz

ARM9E - 20 MHz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, требования для Helix MP3 Decoder 320 Kbps:

ARM7TDMI - 30 MHz

ARM9E - 20 MHz

Ну так девятый арм, всё таки. Наверное, декодер DSP инструкции юзает.

 

Кстати, если софтово регулировать громкость - как это в общем происходит?

Простым делением не прокатит?

Извиняюсь за такие вопросы, но в DSP не шарю :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так девятый арм, всё таки. Наверное, декодер DSP инструкции юзает.

 

Кстати, если софтово регулировать громкость - как это в общем происходит?

Простым делением не прокатит?

Извиняюсь за такие вопросы, но в DSP не шарю :(

Громкость лучше регулировать логарифмическими табличками или это при понижении разрядности используется?

Изменено пользователем zksystem

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...