Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Побитовая адресация 
:(
    Опции темы
Impuls1989
Дата 21.12.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Доброго времени суток уважаемые эксперты. Собственно сабж:
1. Имеется flash-ка.
2. Контроллер диска принимает байт и адрес, куда нужно записать его.
3. Необходимо сказать контроллеру, чтобы он писал отдельные биты по нужным мне адресам.
4. Необходимо изменять именно биты, но никак не переупаковывать байт, а потом переписывать его.
По сути, я хочу взять функции контроллера записи на себя.
Поможет ли тут си/си++, и, если нет, сможет ли это сделать ассемблер?

Заранее спасибо за ответы.

PM MAIL   Вверх
500mhz
Дата 21.12.2011, 16:13 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



я вас огорчу контроллер оперирует минимальным обьектом файловой системы для записи и чтения, а это может быть и сектор в 512 и кластер в 4096, 1 байт вы ни как не запишите.


--------------------

PM MAIL ICQ   Вверх
Impuls1989
Дата 21.12.2011, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Цитата

я вас огорчу контроллер оперирует минимальным обьектом файловой системы для записи и чтения, а это может быть и сектор в 512 и кластер в 4096, 1 байт вы ни как не запишите. 

Это файловая система оперирует данными понятиями. Файловая система для того и нужна, что скрывает сложность записи на физический носитель. Как по Вашему происходит запись на устройство? Получается, что если я напишу файловую систему, где минимальный объект будет = 1 Гб, то контроллер проглотит 1Гб, а потом начнет писать данные? Нет конечно:
1. На шине данных выставляется сам байт.
2. На шине адреса выставляется адрес.
3. Выставляется флаг готовности, и контроллер начинает писать данные.
А один байт записать вообще не проблема. Запишите в файл 1 ASCII символ, и опа - у нас файл размером в 1 байт.
А вот с битами сложнее. Бит - 1 транзистор в матрице. Для простоты транзисторы объединяются в группы по 8, и контроллер имеет возможность оперировать только этой группой. Поэтому, собственно, и была создана данная тема(((
PM MAIL   Вверх
UniBomb
Дата 21.12.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата(Impuls1989 @  21.12.2011,  17:41 Найти цитируемый пост)
А один байт записать вообще не проблема. Запишите в файл 1 ASCII символ, и опа - у нас файл размером в 1 байт.

Теоретически. Практически же этот файл будет занимать столько байт, сколько имеет наименьшая единица хранения данных (кластер). Т.е. 

Цитата(Impuls1989 @  21.12.2011,  17:41 Найти цитируемый пост)
если я напишу файловую систему, где минимальный объект будет = 1 Гб

то таки да, на диске этот файл будет занимать 1 Гб.


Цитата(Impuls1989 @  21.12.2011,  17:41 Найти цитируемый пост)
А один байт записать вообще не проблема

Запись может происходить только блоками. Причём в NAND флеш эти блоки измеряются кибибайтами (4кб для записи и 256 для стирания). Второе "причём" - перед записью данных блок должен быть стёрт. Третье "причём"... А впрочем rtfm никто не отменял.

Так что тут не поможет ни си/си++, ни ассемблер, ни даже чёрная магия  smile 
PM MAIL ICQ Skype   Вверх
Impuls1989
Дата 21.12.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Цитата

Запись может происходить только блоками. Причём в NAND флеш эти блоки измеряются кибибайтами (4кб для записи и 256 для стирания). Второе "причём" - перед записью данных блок должен быть стёрт.

Так что тут не поможет ни си/си++, ни ассемблер, ни даже чёрная магия    

Мда... Жалко. Ну спасибо за ответ. Плохо конечно, но что поделаешь.
PM MAIL   Вверх
500mhz
Дата 22.12.2011, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



а чем обусловлена необходимость записи 1 байте? или бита?


--------------------

PM MAIL ICQ   Вверх
Impuls1989
Дата 23.12.2011, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Цитата

а чем обусловлена необходимость записи 1 байте? или бита? 

Нужно писать биты. Если при записи пропускать биты, которые установлены правильно, то скорость записи увеличится примерно в 1,71 раза (результат моделирования на реальных файлах).
PM MAIL   Вверх
500mhz
Дата 23.12.2011, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



чет не верю
чтоб проверить бит его и прочитать нада и сравнить


--------------------

PM MAIL ICQ   Вверх
newbee
Дата 23.12.2011, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(UniBomb @  21.12.2011,  18:54 Найти цитируемый пост)
Теоретически. Практически же этот файл будет занимать столько байт, сколько имеет наименьшая единица хранения данных (кластер). Т.е. 
Ммм нет, это от файловой системы зависит, может занимать и всего байт, и пару. Вопрос таки вообще мимо ФС, он о физическом уровне.

Добавлено через 1 минуту и 27 секунд
Цитата(Impuls1989 @  23.12.2011,  19:48 Найти цитируемый пост)
Нужно писать биты. Если при записи пропускать биты, которые установлены правильно, то скорость записи увеличится примерно в 1,71 раза (результат моделирования на реальных файлах). 
Хммм. А если на флешку запихать ФС, умеющую разреженные файлы, и записывать их? Правда я в этом деле нуб нубом, могла и глупость сморозить )


--------------------
You're face to face
With man who sold the world
PM   Вверх
math64
Дата 23.12.2011, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Всё зависит от контроллера и от того как организована флеш-память.
Хотя в контроллере могут быть команды для оперирования с отдельными битами, они обычно используются при обращении к OЗУ.
Умный компиллятор в следующем коде будет использовать команды работы с битами, если они имеются:
Код

byte b, c;
b |= 0x10;
c &= ~0x10;

Но для записи флеш-памяти обычно нужно произвести следующую процедуру:
1. Считать блок памяти из флеш в ОЗУ (если нужно, или проинициализировать ОЗУ)
2. Изменить считанные данные в ОЗУ (здесь могут быть использованы команды работы с битами)
3. Очистить блок памяти в флеш (в 0 или 1 в зависимости от типа флеш) Этот этап может быть пропущен если нужно изменить 1 в 0 или наоборот и флеш-память позволяет производить такую запись без предварительной очистки)
4. Записать данные.
Размер блока флеш-памяти может не совпадать с размером кластера файлоыой системы, если таковая используется. Размер кластера обычно больше размера блока.
PM   Вверх
volatile
Дата 23.12.2011, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



На аппаратном уровне, процессор не может работать даже с ОЗУ на битовом уровне.
Это просто физически невозможно. Там данные выставляются на шину данных, и однми стробом прописывается целый байт (или даже целое с слово в зависимости от режима), один бит прописать нельзя. Чтоб изменить 1 бит, процессор считывает с ОЗУ байт, меняет у себя во внутреннем регистре бит, записывает назад в ОЗУ. 
Это про ОЗУ. Что уж говорить про флеш память... там стирать информацию можно только блоками. Размер блока зависит от конкретной микросхемы ППЗУ. Стирать - есть записывать все 0xFF. Записывать нолики можно и отдельными байтами.
Все это самый низкий уровень, на котором работает контроллер флешки, (встроенный в саму флешку)
выше этого(вернее ниже  smile) по-любому не прыгнуть. Да даже и до этого уровня вас никто не допустит. 
Прямого доступа к флеш памяти у нас нет. все идет посредством ФС. А там накладывается еще и кластерная система.
Вообще имхо, вопрос поставлен не корректно. Дело не в битовом доступе. проблема скорей всего в чем-то другом...

PM MAIL   Вверх
Impuls1989
Дата 27.12.2011, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Цитата

чет не верю
чтоб проверить бит его и прочитать нада и сравнить 

Верьте или нет, но моделирование не врет. Хотите исходник покажу.
По поводу чтения - не совсем так. Прочитать можно только первый бит, а все остальные чередовать:
1010101010101010101010101...
А сравнивать действительно нужно. Вот поэтому в ~1,71 раза а не в ~2 раза увеличивается скорость при моделировании.
Цитата

Хммм. А если на флешку запихать ФС, умеющую разреженные файлы, и записывать их? Правда я в этом деле нуб нубом, могла и глупость сморозить ) 

Не совсем понятен Ваш ответ. Не могли бы немного уточнить.
Цитата

Всё зависит от контроллера и от того как организована флеш-память.
Хотя в контроллере могут быть команды для оперирования с отдельными битами, они обычно используются при обращении к OЗУ.
Умный компиллятор в следующем коде будет использовать команды работы с битами, если они имеются:
Код

byte b, c;
b |= 0x10;
c &= ~0x10;


Операции то с битами, но в памяти переписывается целый байт. Товарищ volatile подробно об этом описал ниже.
Цитата

Это про ОЗУ. Что уж говорить про флеш память... там стирать информацию можно только блоками. Размер блока зависит от конкретной микросхемы ППЗУ. Стирать - есть записывать все 0xFF. Записывать нолики можно и отдельными байтами.
Все это самый низкий уровень, на котором работает контроллер флешки, (встроенный в саму флешку)
выше этого(вернее ниже  ) по-любому не прыгнуть. Да даже и до этого уровня вас никто не допустит. 
Прямого доступа к флеш памяти у нас нет. все идет посредством ФС. А там накладывается еще и кластерная система.
Вообще имхо, вопрос поставлен не корректно. Дело не в битовом доступе. проблема скорей всего в чем-то другом...

Ну, допустим, файловые системы пишутся. Никто не запрещает поковырять уже готовую ФС (благо OpenSource рулит). Так что добраться до контроллера можно, а вот писать отдельные биты, конечно же, нельзя (зачем бы тогда нужен был контроллер). 
На счет битового доступа: проблема, как раз таки, в нем: хочется изменить бит так, чтобы его соседи не перезаписывались. А вот уже реальность это сделать не позволяет - это да.
PM MAIL   Вверх
volatile
Дата 28.12.2011, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



 smile 
Impuls1989, может конечно не в тему, но возможно вам поможет.
Если включить write caching на флеш-драйве, то флешка будет работать на порядок быстрее.
По умолчанию кеширование отключено. Попробуйте включить и удивитесь на сколько быстрее станет работать (особенно на мелких файлах).
например я включаю это по умолчанию, никаких проблем на разу не было.
Главное флешку не выдергивать сразу, а дать время ей записаться (секунд 5-10).

 smile 
PM MAIL   Вверх
Impuls1989
Дата 28.12.2011, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Цитата(volatile @ 28.12.2011,  01:19)
smile 
Impuls1989, может конечно не в тему, но возможно вам поможет.
Если включить write caching на флеш-драйве, то флешка будет работать на порядок быстрее.
По умолчанию кеширование отключено. Попробуйте включить и удивитесь на сколько быстрее станет работать (особенно на мелких файлах).
например я включаю это по умолчанию, никаких проблем на разу не было.
Главное флешку не выдергивать сразу, а дать время ей записаться (секунд 5-10).

 smile

Неее... Это не по джедайски smile  Да и задача не в этом

Это сообщение отредактировал(а) Impuls1989 - 28.12.2011, 15:50
PM MAIL   Вверх
baldina
Дата 28.12.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(Impuls1989 @  23.12.2011,  18:48 Найти цитируемый пост)
 Если при записи пропускать биты, которые установлены правильно, то скорость записи увеличится примерно в 1,71 раза (результат моделирования на реальных файлах)

как же Вы моделировали, если вопрос и заключается в том как писать отдельные биты?

Цитата(Impuls1989 @  27.12.2011,  09:48 Найти цитируемый пост)
Верьте или нет, но моделирование не врет. Хотите исходник покажу.

очень хотим
PM MAIL   Вверх
Impuls1989
Дата 6.1.2012, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Цитата(baldina @ 28.12.2011,  16:03)
как же Вы моделировали, если вопрос и заключается в том как писать отдельные биты?

Цитата(Impuls1989 @  27.12.2011,  09:48 Найти цитируемый пост)
Верьте или нет, но моделирование не врет. Хотите исходник покажу.

очень хотим

Ну массивы никто еще не отменял. Моделирование в том и заключается, что не нужно реализовывть все по правде. По этому поводу я писал статью на хабре. Там и исходники и комментарии к ним.
PM MAIL   Вверх
500mhz
Дата 6.1.2012, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



моделирование не верно, сделайте по другому, определите размер кластера вашей ФС, создайте рандомный файл с заполнением 0 и 1 но с размерностью кластера и на нем тренеруйтесь.


--------------------

PM MAIL ICQ   Вверх
Impuls1989
Дата 7.1.2012, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Цитата(500mhz @ 6.1.2012,  10:21)
моделирование не верно, сделайте по другому, определите размер кластера вашей ФС, создайте рандомный файл с заполнением 0 и 1 но с размерностью кластера и на нем тренеруйтесь.

Зачем? Системные вызовы read/write небуферизированный I/O. Размер кластера не имеет особого значения. К тому же я проверял на файлах разной размерности. Результаты идентичны.
PM MAIL   Вверх
xvr
Дата 8.1.2012, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Impuls1989 @  6.1.2012,  09:37 Найти цитируемый пост)
 Моделирование в том и заключается, что не нужно реализовывть все по правде. По этому поводу я писал статью на хабре.

Почитал статью -  у вас неверное представление о работе FLASH памяти (о чем вам там lorc и написал), соответственно ваше моделирование не учитывает реальное железо


PM MAIL   Вверх
Impuls1989
Дата 9.1.2012, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Цитата(xvr @ 8.1.2012,  20:57)
Почитал статью -  у вас неверное представление о работе FLASH памяти (о чем вам там lorc и написал), соответственно ваше моделирование не учитывает реальное железо

Ну поэтому я там и написал пр взгляд дилетанта и про то, что у меня ничего не вышло. Но стоит отметить тот момент, что, в принципе, такая запись может быть осуществлена. Да и интересен сам результат: при незначительном усложнении алгоритма записи, значительно увеличилась скорость. А flash нужна была для того, чтобы замерить относительную скорость операций записи и сравнения.
PM MAIL   Вверх
baldina
Дата 12.1.2012, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(Impuls1989 @  6.1.2012,  09:37 Найти цитируемый пост)
Ну массивы никто еще не отменял. Моделирование в том и заключается, что не нужно реализовывть все по правде. 

Ваша модель не адекватна реальности (это уже написали).
Фактически Вы выяснили, что время передачи зависит от передаваемого объема. Но этот вывод получается математически, тут нечего моделировать.

PM MAIL   Вверх
Impuls1989
Дата 12.1.2012, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Цитата(baldina @ 12.1.2012,  14:05)
Ваша модель не адекватна реальности (это уже написали).
Фактически Вы выяснили, что время передачи зависит от передаваемого объема. Но этот вывод получается математически, тут нечего моделировать.

Не адекватна текущей реальности. Что будет дальше никто не знает. Ведь если есть идея, и идея работает - значит ее можно попытаться осуществить в железе. И на уровне железа такая система будет работать. А именно этого я и пытался добиться. И тут не стоял вопрос: можно ли сделать это на самом деле (хотя это было бы очень здорово)

Это сообщение отредактировал(а) Impuls1989 - 12.1.2012, 15:40
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.