![]() |
|
|
![]()
|
|
| BenGan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 31.10.2011 Репутация: нет Всего: нет |
Всем привет!
Подскажите, есть возможность из Builder обращаться к диску на уровне сектора? Нужно работаь с флеш картой. Обкатать алгоритм создания и удаления файла под FAT32, с тем, чтобы потом перенести этот алгоритм на контроллер. |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: нет Всего: 16 |
\\.\C:
букву по вкусу. Есть ещё \Devices\Harddisk0\Partition0 для полного диска (включая таблицу разделов). Ну, или не Harddisk. |
|||
|
||||
| BenGan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 31.10.2011 Репутация: нет Всего: нет |
\\.\C:
букву по вкусу. Есть ещё \Devices\Harddisk0\Partition0 для полного диска (включая таблицу разделов). Ну, или не Harddisk. Вы что, издеваетесь? Это форум по С/С++ Builder, и вопрос был - как из Builder обращаться к диску на уровне сектора? Мне нужна функция C/C++ Builder, которая позволяет обращаться к диску на уровне сектора. Или непосредственно функция API Windows. В DOS'овские времена это были т.н. короткое и длинное чтение, вызываемые через int 13. Это сообщение отредактировал(а) BenGan - 1.11.2011, 12:34 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Вам и ответили. CreateFile с именем файла, на который вы так буйно отреагировали (См. раздел Physical Disks and Volumes по вышеприведенной ссылке) |
|||
|
||||
| BenGan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 31.10.2011 Репутация: нет Всего: нет |
Тогда, извиняюсь, плохо объяснил.
Мне нужен физический доступ к диску на уровне сектора. Нужно читать Boot Sector BPB Structure, из прочитанных данных вычислять смещение по которому сидит дирректорий и FAT1, FAT2. Дальше, заполнять поля дирректории именем файла, его атрибутами и ссылкой на первый элемент цепочки FAT, искать свободные кластеры, заполнять их данными и формировать цепочку списка FAT. В общем, то, что делала DOS, и что делает Windows при создании файла. Потом, этот алгоритм будет перенесен на контроллер, на котором нет никакой операционной системы. Есть только физический доступ к произвольному сектору флеш карты, который я уже отладил. То есть, тебуется самому формировать файловую структуру на флеш карте. Ваша ссылка (См. раздел Physical Disks and Volumes по вышеприведенной ссылке) очень в тему, спасибо! Наверное, я тупой, но можно-же было написать, что это путь Windows SDK "\Devices\Harddisk0\Partition0". Я думал tzirechnoy отправил меня к какой-то программе, типа WinHex. Это сообщение отредактировал(а) BenGan - 1.11.2011, 20:17 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
| BenGan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 31.10.2011 Репутация: нет Всего: нет |
Нет, форматировать не надо. Файл формируется на предварительно отформатированной флешке. С абсолютно стандартной FAT32. Сейчас я могу забить любой сектор флеш карты, например кодом 0xEE. Ноэто же не файл. Файл должен кто-то сделать. Это и есть моя задача. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
Ну, как я понял, ТС записать файл на флешку из микроконтоллера, в котором нет ОС, но для которого есть кросскомпилятор C или C++.
А для начала он хочет отладить программу на PC, где есть удобный отладчик (используется C++Builder). При переносе на микроконтроллер функции Windows API будут заменены на API контроллера. А в C++Builder специальных функций для этого нет - нужно использовать CreateFile. Это сообщение отредактировал(а) math64 - 3.11.2011, 21:28 |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
что то я в этом сомневаюсь, для такого варианта нужно использовать именно платформонезависимое (fopen/fwrite). -------------------- |
|||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
Насколько я понял, в API контроллера не файловой системы - поэтому нет fopen/fwrite. А есть что-то типа
Эти функции нужно реализовать с помощью WinAPI, отладиться и после этого всё перенести в контроллер. |
||||
|
|||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: нет Всего: 14 |
а может ТС не стоит изобретать велосипед?
есть прожка rawwrite с ней идет diskio.dll и сорцы тоже http://www.chrysocome.net/rawwrite как бы само проситься быть использованым -------------------- |
|||
|
||||
| BenGan |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 31.10.2011 Репутация: нет Всего: нет |
Совершенно верно! У контроллера Atmel Atmega64 нет никакой API. А компилятор С есть. Функцию чтения записи сектора я уже написал, для этого приходится разбудит флешку, посылать импульсы на одну ножку, затем иницилизировать через итерфейс SPI внутренние регистры флешки и потом можно обращаться к сектору паямяти 512 байт. Естественно, компилятор знать не может, что к контроллеру припаяна флеш карта. Работать с контроллером неудобно, поэтому хочется отладить логику создания файла на обычном компьютере. В отлаженном коде создания файла только и надо будет, подменить функции обращения к диску на мои функции записи/чтения сектора. Только вот копризничает Windows не хочет CreateFile() работаь.
hDevice возвращает 0xFFFFFF а текстовоя строка, соответствующая коду ошибки - "Ёль". Мож кто-то сталкивался с чем-то похожим?
Качнул, разбираюсь... Это сообщение отредактировал(а) BenGan - 4.11.2011, 22:05 |
||||||
|
|||||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: нет Всего: 16 |
[QUOTE=BenGan,4.11.2011, 21:59]
Обратных слэшэй в имени файла маловато. Компилятор C в строковых константах использует обратный слэш как экранирующий символ для вызова спец.возможностей (напр. \n переводится в перевод строки (0x13)), соответственно, каждый настоящий обратный слэш должэн удваиваться: "\\\\.\\G:" |
|||
|
||||
| BenGan |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 31.10.2011 Репутация: нет Всего: нет |
Спасибо! Заработало!
Здесь код на паскале, часть кода спрятана в DLL. Я пользуюсь : http://www.dharmanitech.com/ Там, в самом низу страницы, исходники процедур создания файла под FAT32 и хорошие ссылки по описанию самой FAT. Может кому полезно будет. Это сообщение отредактировал(а) BenGan - 6.11.2011, 11:38 |
||||
|
|||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |