A. Fig Lee 0 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Что значит "найти"? Последовательное чтение файла предполагает следующие переменные: 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 Килобайт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба сектор сам по себе 512 байт. надо и себе озу оставить. если там длинные имена - байт 100 под имя. в опчем разве что полсектора читать. соответственно, возрастает сложность кода. и все влезет в 1 Килобайт? 100 байт под LFN не маловато будет? :) А вообще RST7 вёл речь про чтение секторов без поддержки LFN... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 32 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба 100 байт под LFN не маловато будет? :) Конечно "маловато".. Нужно 2*260. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zksystem 0 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба 100 байт под LFN не маловато будет? :) А вообще RST7 вёл речь про чтение секторов без поддержки LFN... Вообще топик не про файловую систему, а про STM32 MP3 :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Конечно "маловато".. Нужно 2*260. Точно, там же юникод ещё... :) Вообще топик не про файловую систему, а про STM32 MP3 :rolleyes: Вот такие вот мы флудеры... B) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Конечно "маловато".. Нужно 2*260. ну маловато, но идея была - сделать кастрированную читалку ФАТ. Если там всего 512 байт в VLSI - че делать? все - каюк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zksystem 0 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба ну маловато, но идея была - сделать кастрированную читалку ФАТ. Если там всего 512 байт в VLSI - че делать? все - каюк. Для чего длинные имена в mp3 плеере на VLSI? Я думаю чтение ID3 тэгов сделать куда разумнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 32 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Я думаю чтение ID3 тэгов сделать куда разумнее. А есть по ним инфа? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Если там всего 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 32 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба To Rst7: Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergvks 0 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба А кто-нить пробовал отлаживать проги для vs-ок ? Нормальный отладчик там за бабки, а сидеть в командной строке после того же Кейла как-то ломает. ИМХО для этих целей прямо просится str911fam44 - стоит недорого, памяти и производительности выше крыши для этой задачи, I2S легко реализуется на таймере и ssp. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Для чего длинные имена в mp3 плеере на VLSI? Я думаю чтение ID3 тэгов сделать куда разумнее. Для плеера LFN нафиг не нужны. Мне для универсального диска на карточке это понадобится. А кто-нить пробовал отлаживать проги для vs-ок ? Нормальный отладчик там за бабки, а сидеть в командной строке после того же Кейла как-то ломает. ИМХО для этих целей прямо просится str911fam44 - стоит недорого, памяти и производительности выше крыши для этой задачи, I2S легко реализуется на таймере и ssp. Что, прямо таки девятый арм необходим? А седьмые не подходят? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergvks 0 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Что, прямо таки девятый арм необходим? А седьмые не подходят? Так цена почти одинаковая, а запас по памяти и производительности всегда приятно иметь. Сейчас mp3, а завтра flac захочется и т.д. Кстати, требования для Helix MP3 Decoder 320 Kbps: ARM7TDMI - 30 MHz ARM9E - 20 MHz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 27 января, 2009 Опубликовано 27 января, 2009 · Жалоба Кстати, требования для Helix MP3 Decoder 320 Kbps: ARM7TDMI - 30 MHz ARM9E - 20 MHz Ну так девятый арм, всё таки. Наверное, декодер DSP инструкции юзает. Кстати, если софтово регулировать громкость - как это в общем происходит? Простым делением не прокатит? Извиняюсь за такие вопросы, но в DSP не шарю :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zksystem 0 27 января, 2009 Опубликовано 27 января, 2009 (изменено) · Жалоба Ну так девятый арм, всё таки. Наверное, декодер DSP инструкции юзает. Кстати, если софтово регулировать громкость - как это в общем происходит? Простым делением не прокатит? Извиняюсь за такие вопросы, но в DSP не шарю :( Громкость лучше регулировать логарифмическими табличками или это при понижении разрядности используется? Изменено 27 января, 2009 пользователем zksystem Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться