Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
26.03.2013, 23:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,984
Сказал спасибо: 0
Сказали Спасибо 4,943 раз(а) в 2,371 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
Сообщение от Frensis777
|
для записи/чтения 1 байта будет тратиться весь сектор. При записи/чтении очередного байта будет использоваться уже следующий сектор. В итоге, большие части секторов останутся незанятыми информацией
|
глупость
речь идет о последовательности операций - чтение сектора-модификация байта-запись сектора. при необходимости записи еще одного байта и свободном пространстве в данном секторе повторяется цикл для байта с адресом+1.
умные люди используют "образ" сектора в озу и издеваются над ним, производя запись посекторно
|
|
|
|
27.03.2013, 00:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
Сообщение от Frensis777;611136Я такого не говорил. Я говорил [B
|
побайтный[/B]:
|
Безусловно я оговорился. Побайтные операции.
Цитата:
|
сектор?
Разве это не блок?
|
Сектор, блок, страница - какая разница, как назовете. Важен размер.
Цитата:
|
Но разве это будет рационально, когда стоит задача записи информации побайтно?
|
Механизм записи во флеш отличается от записи в статическую память. Время записи значительно дольше времени чтения. Принимая во внимание, что время записи одного байта сравнимо со временем записи одной страницы, выводы о рациональности сделайте сами. Чем больше размер страницы, тем выше будет скорость записи в целом. Время же записи определяется классом карты. Класс 2 намного медленнее, скажем, класса 6. А класс 10 - вообще супер! И цены на них как показатель скорости.
Цитата:
|
Т.е. правильно ли я понял, что используя данные функции, приведенные мною в 1 посте, для записи/чтения 1 байта будет тратиться весь сектор.
|
Вы с механизмом хеширования знакомы? Вы читаете за раз страницу. Извлекаете из нее нужный вам байт. Принимая во внимание последовательное расположение байтов, незачем делать повторное чтение того же сектора. Читаете следующий байт из уже сосчитанного буфера. Контролируя его границу. Организация размещения байтов при сохранении вам подвластна. Незачем их разбрасывать без нужны по всему адресному пространству. Это нужно в других случаях, которые у вас пока не возникали.
Цитата:
|
При записи/чтении очередного байта будет использоваться уже следующий сектор.
|
Зачем?!! Очередной байт уже среди 512 сосчитанных!
Цитата:
|
В итоге, большие части секторов останутся незанятыми информацией.
|
Это ваша информация. И это вы ее размещаете в карте. Как разместите, так и будет. Обычно делают так. Заполняют некий буфер в ОЗУ 512-ю байтами, потом закидывают буфер в карту, стартует процесс записи, а в это время пишется в другой буфер. Процесс без разрыва во времени. Если же времени много, то можно и прерываться. Все зависит от ваших условий.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
27.03.2013, 10:29
|
|
Частый гость
Регистрация: 20.01.2012
Сообщений: 16
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
А подскажите, при включении поддержки карты, используется много ОЗУ. Если ли уже в выделенном ОЗУ 512 байт для сектора который читается?
Мне надо записывать поток данных, для этого я делаю два буфера по 312 байт (больше нет ОЗУ), и пока один наполняется - второй сохранаю на карту.
И все бы хорошо, но катастрофически не хватает памяти для других задач (МК мега128 заменить мегу невозможно).
Вот и интересно, можно ли как-то оптимизировать задачу, что бы высвободить ОЗУ.
Уменьшать буфера не могу, если сделать на 32 байта меньше - уже не успеваю их сохранять.
|
|
|
|
27.03.2013, 11:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
Сообщение от Valentin44
|
А подскажите, при включении поддержки карты, используется много ОЗУ. Если ли уже в выделенном ОЗУ 512 байт для сектора который читается?
Мне надо записывать поток данных, для этого я делаю два буфера по 312 байт (больше нет ОЗУ), и пока один наполняется - второй сохранаю на карту.
И все бы хорошо, но катастрофически не хватает памяти для других задач (МК мега128 заменить мегу невозможно).
Вот и интересно, можно ли как-то оптимизировать задачу, что бы высвободить ОЗУ.
Уменьшать буфера не могу, если сделать на 32 байта меньше - уже не успеваю их сохранять.
|
Если разговор о CV only - я пас. Не люблю, когда что-то там за меня распределяет. Вот потом и выясняй, где там что и каких размеров. ПОчти как у Васика..
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
27.03.2013, 12:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
Сообщение от Frensis777
|
Разве это не блок?
|
Имелся ввиду блок конечно, чтобы не путать с сектором, который на дисках, он был назван "сектор карты". Блок, блок...
Сообщение от Frensis777
|
Где, в каких источниках можно ознакомиться с описанием и применением низкоуровневых операций(не FAT) для выполнения действий с вычисления адресации и т.п?
|
Вычисление адресации нафик не нужно, если нет планов работать с этой картой, как с FAT-диском. То есть, если карта будет использоваться только в том устройстве, о котором сейчас речь, то можно вести запись, например, начиная со второго физического блока, а в первом хранить информацию о том, сколько данных было записано. Получится самодельная, предельно упрощенная ФС с одним файлом. Вообще говоря, можно даже извернуться на первое время и работать так с картой, несущей на себе ФС, правда - с некоторой подготовкой. Нужно отформатировать карту и создать на ней файл с размером, равным всему объему ФС на карте. После этого нужно вычислить номер блока карты, на который приходится начало файла, и возможно - смещение внутри блока ( если он больше 512 байт, то первый сектор файла может не совпасть с началом блока) и использовать полученные координаты в программе для м/к. Только тут размер записанных данных лучше хранить в начале файла, чтобы не портить данные ФС.
Правда, я бы всё же рекомендовал не отказываться от работы с ФС на карте - неразумно это, так как лишает возможности прямого и ничем не замутнённого обмена файлами с другими устройствами. Карты с FAT понимают все или почти компьютеры - зачем лишать себя такой свободы?
В CodeVision, библиотека работы с SD/FAT - цельнотянутая от Chan'а, поэтому именно там и следует искать ответ на все вопросы, касающиеся работы с картой и с ФС.
В частности, чтобы писать и читать побайтно, достаточно пользоваться не низкоуровневыми функциями работы с картой, а функциями чтения из файла / записи в файл:
Код:
|
FRESULT f_read (
FIL* fp, /* [IN] File object */
void* buff, /* [OUT] Buffer to store read data */
UINT btr, /* [IN] Number of bytes to read */
UINT* br /* [OUT] Number of bytes read */
);
FRESULT f_write (
FIL* fp, /* [IN] Pointer to the file object structure */
const void* buff, /* [IN] Pointer to the data to be written */
UINT btw, /* [IN] Number of bytes to write */
UINT* bw /* [OUT] Pointer to the variable to return number of bytes written */
); |
При этом ФС сама определит момент перехода через границу сектора и запишет/считает нужный сектор прозрачно для пользователя.
Сообщение от Valentin44
|
А подскажите, при включении поддержки карты, используется много ОЗУ. Если ли уже в выделенном ОЗУ 512 байт для сектора который читается?
|
Да, свой буфер у библиотеки есть. Смотрите в первоисточник, в частности, там есть раскладка ресурсов в разных конфигурациях.
Обоим: у Чана есть готовые примеры использования его либы, работают с полпинка. Рекомендую начать с них:
__________________
There's always more than one way to skin a cat.
|
|
|
Сказали "Спасибо" tempora
|
|
|
27.03.2013, 13:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
Сообщение от tempora
|
В частности, чтобы писать и читать побайтно, достаточно пользоваться не низкоуровневыми функциями работы с картой, а функциями чтения из файла / записи в файл:
|
Приведенные ниже две функции есть часть файловой системы. В любом случае они вызывают функции более низких уровней, не избавляют от механизма кеширования сектора (чтение-модификация-запись), лишь делая его невидимым для "программера". И лишний раз дают основание думать, что в карту пишется одиночный байт.
В споры о том, нужно ли знать низкоуровневые процедуры (отягощающие светлый разум кодописателя) не вступаю. Имею твердое убеждение, что надо. Оно незыблимо.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
27.03.2013, 13:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
Сообщение от ut1wpr
|
они вызывают функции более низких уровней, не избавляют от механизма кеширования сектора
|
Кого-то может и не избавляют, а программиста именно избавляют, так как ему не нужно писать соответствующий код самостоятельно. В чём, собственно, и состоит смысл библиотек функций, классов и т.д.
Понимать что творится в библиотеках, разумеется, нужно, а вот писать всё это самому, невзирая на наличие библиотек - чаще всего не нужно.
__________________
There's always more than one way to skin a cat.
|
|
|
|
27.03.2013, 13:57
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 716
Сказал спасибо: 363
Сказали Спасибо 797 раз(а) в 371 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
Valentin44,
Что-то катастрофически отожрало все ОЗУ... Windows for AVR?..
Atmega128 вроде как поддерживает "...up to 64Kbytes Optional External Memory Space", если уж не хватает внутренних 4КБайт ОЗУ для 1-2 буферов по 512 байт.
в постах ув. ut1wpr (без обид) так и читается между строк "Пиши на АСМе". Впрочем, тогда при поддержке карты у атмеги еще останется 70% ОЗУ, которого так катастрофически не хватает для других задач.
|
|
|
|
27.03.2013, 14:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
Сообщение от tempora
|
Понимать что творится в библиотеках, разумеется, нужно, а вот писать всё это самому, невзирая на наличие библиотек - чаще всего не нужно.
|
Как после сказанного новичку поступить? Забить на разборку библиотек? Поверить автору библиотек "на слово", что вся его писанина универсальна и устроит в любой ситуации? Как потом отследить ошибки библиотеки? Что за программист получится, который зависит от библиотек?
Вы же сами только что сказали, что
Цитата:
|
Понимать что творится в библиотеках, разумеется, нужно
|
. Как их "понимать", если вы пользуетесь вызовом готовых функций? Вот вы порекомендовали функцию побайтового обмена с картой. А что за этим стоит? Ведь ТС теперь будет утверждать, что это возможно, мол "авторитеты" подтвердили. А о том, как реально все происходит, ему и невдомек. И что "ковыряя" по байтику он все равно будет тратить время на чтение-запись-чтение сектора. Сколько байтиков - столько тройных обращений. Для изменения размера сектора в карте есть отдельная команда в ее системе команд. Но насколько я помню, в современных картах она введена лишь для совместимости... Сколько я ни пытался размер менять, карта все равно работала только с 512. Сейчас уже трудно найти старые MMC с малыми объемами. В них эта функция еще жила в каком-то усеченном варианте. Но, повторяю, все мои карты возвращали положительный результат приема этой команды, но толку ноль. 512 и только. А вот 1024 - это пожалуйста.
Ладно. ТС-у наверное надоело, он ждет готовых примеров, побыстрее их вставить в свой код. У вас есть? У меня нету. Я уже давно из под IAR-a не вылазю, а там немного по иному, нежели в CV.
Наверное, мне давно пора заткнуться, тот кто хотел меня услышать, давно услышал.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
27.03.2013, 14:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Вопросы по SD-Card in CodeVisionAVR
Сообщение от ut1wpr
|
Как их "понимать", если вы пользуетесь вызовом готовых функций? Вот вы порекомендовали функцию побайтового обмена с картой. А что за этим стоит?
|
Ну, это Вы погорячились. Я вовсе не даю рекомендаций, не изучать предмет, в чём, кстати, легко убедиться, не уходя далеко из этого топика - я дал четыре ссылки на страницы Чана, на которых есть все необходимые пояснения, ссылки на стандарты SD от Sundisk и на FAT-FS от M$, исходники библиотек и примеров её использования:
Сообщение от tempora
|
... библиотека работы с SD/FAT - ... от Chan'а, ... именно там и следует искать ответ на все вопросы, касающиеся работы с картой и с ФС.
... Смотрите в первоисточник, в частности, там есть раскладка ресурсов в разных конфигурациях.
... примеры использования его либы, ... Рекомендую начать с них:
|
Что будет " ТС теперь утверждать" зависит от того, насколько тщательно он изучит эти материалы.
В сложных предметах, начинать с самого низа малопродуктивно, поскольку, если не получить сначала общее представление о карте предметной области, с разделением на подобласти, то уложить получаемые при таком обучении знания будет некуда - получится бессистемный набор, даже не знаний - сведений.
Писать все самостоятельно нельзя - времени не хватит. Если бы каждый учитель говорил - " пусть мои ученики изучат всё, что изучал я", - то мы до сего дня изучали бы только как добывать огонь трением, как выделывать шкуры уриной и тому подобное ( см. вариант (a) на схеме). Человечество использует другую методу, в которой знания предыдущих поколений передаются последующим в систематизированном, сокращенном виде ( да и не все знания-то), на рисунке - это перекрывающиеся части прямоугольников варианта (b):
Ньютон говорил ( не дословно) - "наши открытия мы делаем, стоя на плечах гигантов".
Насколько должны перекрываться эти объемы знаний разных поколений - вопрос, не имеющий общего, единого на все случаи ответа, и решаемый отдельно в каждом конкретном случае. Решая его, необходимо понимать, что исполнение всего на практике ( например - самостоятельное написание кода, уже имеющегося в библиотеке) процедура дорогостоящая и далеко не всегда приводящая к пониманию лучшему, чем то, что даёт хорошее изучение "кода библиотек".
Не буду зарекаться, что моё мнение " незыблемо", но чтобы его изменить понадобятся весьма основательные аргументы.
_______________________________________
Upd:
Сообщение от Valentin44
|
катастрофически не хватает памяти для других задач (МК мега128
|
Сообщение от j-Roger
|
Что-то катастрофически отожрало все ОЗУ...?
|
Кстати, наверняка всё ОЗУ растрачено на строковые литералы.
Рекомендую перенести их в память программ, и всё наладится.
_______________________________________
Upd2:
Сообщение от ut1wpr
|
Я уже давно из под IAR-a не вылазю, а там немного по иному, нежели в CV.
|
Я тоже наIARиваю, однако, разницы в использовании библиотек Чана не заметил. В чём она заключается?
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 27.03.2013 в 15:07.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
LPC2468+SD card
|
Segriv |
Микроконтроллеры, АЦП, память и т.д |
9 |
07.11.2011 12:47 |
Ассемблерная вставка в CodeVisionAVR вопросы
|
E_C_C |
Микроконтроллеры, АЦП, память и т.д |
4 |
29.06.2011 17:14 |
SD-card
|
-Dreamer- |
Микроконтроллеры, АЦП, память и т.д |
10 |
15.05.2010 20:21 |
IDE card reader
|
ILLLYA |
Микроконтроллеры, АЦП, память и т.д |
1 |
14.04.2007 16:52 |
Разъем по MultiMedia Card
|
Дима |
Микроконтроллеры, АЦП, память и т.д |
1 |
16.07.2003 18:06 |
Часовой пояс GMT +4, время: 05:48.
|
|