Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с диском нанизком уровне, типа int 13 
:(
    Опции темы
BenGan
Дата 31.10.2011, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет!

Подскажите, есть возможность из Builder обращаться к диску на уровне сектора?

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


PM MAIL   Вверх
tzirechnoy
Дата 31.10.2011, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



\\.\C: 
букву по вкусу.
Есть ещё \Devices\Harddisk0\Partition0 для полного диска (включая таблицу разделов). Ну, или не Harddisk.
PM MAIL   Вверх
BenGan
Дата 1.11.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
xvr
Дата 1.11.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(BenGan @  1.11.2011,  12:31 Найти цитируемый пост)
Это форум по С/С++ Builder, и вопрос был  - как из Builder обращаться к диску на уровне сектора?

Вам и ответили. 
Цитата(BenGan @  1.11.2011,  12:31 Найти цитируемый пост)
Или непосредственно функция API Windows.

CreateFile с именем файла, на который вы так буйно отреагировали  smile 
(См. раздел Physical Disks and Volumes по вышеприведенной ссылке)

PM MAIL   Вверх
BenGan
Дата 1.11.2011, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
xvr
Дата 1.11.2011, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(BenGan @  1.11.2011,  19:58 Найти цитируемый пост)
То есть, тебуется самому формировать файловую структуру на флеш карте.

А банальный format вас не устроит? Или у вас какой то весь в конец нестандартный FAT?

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


Новичок



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

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



Цитата

А банальный format вас не устроит? Или у вас какой то весь в конец нестандартный FAT?


Нет, форматировать не надо.
Файл формируется на предварительно отформатированной флешке. С абсолютно стандартной FAT32.
Сейчас я могу забить любой сектор флеш карты, например кодом 0xEE. Ноэто же не файл.
Файл должен кто-то сделать. Это и есть моя задача.

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


Эксперт
****


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

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



Цитата(BenGan @  2.11.2011,  21:24 Найти цитируемый пост)
Файл должен кто-то сделать.

Вам нужен сделать обычный файл на флэшке, вставленной в PC? Тогда это делается обычными методами ОС (fopen/fwrite) и прямой доступ к секторам не нужен. Или у вас какие то особые требования к файлу?

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


Эксперт
****


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

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



Ну, как я понял, ТС записать файл на флешку из микроконтоллера, в котором нет ОС, но для которого есть кросскомпилятор C или C++.
А для начала он хочет отладить программу на PC, где есть удобный отладчик (используется C++Builder).
При переносе на микроконтроллер функции Windows API будут заменены на API контроллера.
А в C++Builder специальных функций для этого нет - нужно использовать CreateFile.

Это сообщение отредактировал(а) math64 - 3.11.2011, 21:28
PM   Вверх
500mhz
Дата 4.11.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


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

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



Цитата

При переносе на микроконтроллер функции Windows API будут заменены на API контроллера.

что то я в этом сомневаюсь, для такого варианта нужно использовать именно платформонезависимое (fopen/fwrite).


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

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


Эксперт
****


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

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



Цитата(500mhz @  4.11.2011,  13:14 Найти цитируемый пост)
что то я в этом сомневаюсь, для такого варианта нужно использовать именно платформонезависимое (fopen/fwrite).

Насколько я понял, в API контроллера не файловой системы - поэтому нет fopen/fwrite. А есть что-то типа
Код

void ReadSector(int sector, char* data, int size);
void WriteSector(int sector, char* data, int size);

Эти функции нужно реализовать с помощью WinAPI, отладиться и после этого всё перенести в контроллер.
PM   Вверх
500mhz
Дата 4.11.2011, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


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

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



а может ТС не стоит изобретать велосипед?
есть прожка rawwrite с ней идет diskio.dll и сорцы тоже http://www.chrysocome.net/rawwrite

как бы само проситься быть использованым


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

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


Новичок



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

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



Цитата

Насколько я понял, в API контроллера не файловой системы - поэтому нет fopen/fwrite. А есть что-то типа


Совершенно верно! У контроллера Atmel Atmega64 нет никакой API. А компилятор С есть. 

Функцию чтения записи сектора я уже написал, для этого приходится разбудит флешку, посылать импульсы на одну ножку, затем иницилизировать через итерфейс SPI внутренние регистры флешки и потом можно обращаться к сектору паямяти 512 байт. Естественно, компилятор знать не может, что к контроллеру припаяна флеш карта.

Работать с контроллером неудобно, поэтому хочется отладить логику создания файла на обычном компьютере. В отлаженном коде создания файла только и надо будет, подменить функции обращения к диску на мои функции записи/чтения сектора.

Только вот копризничает Windows не хочет CreateFile() работаь.

Код

HANDLE hDevice;
 BOOL fResult;
 DWORD cb,ErroCode;
 char InBuffer[512];
 char OutBuffer[512];
 char TextBuffer[512];

 hDevice =CreateFile("\\.\G:", GENERIC_READ, FILE_SHARE_WRITE,0,
                     OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);

 if (hDevice == (HANDLE) INVALID_HANDLE_VALUE){

     FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,
               GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), &TextBuffer[0], 0,NULL);

     MessageBox( NULL, &TextBuffer[0], "GetLastError", MB_OK|MB_ICONINFORMATION );


hDevice возвращает 0xFFFFFF
а текстовоя строка, соответствующая коду ошибки - "Ёль". 

Мож кто-то сталкивался с чем-то похожим?

Цитата

есть прожка rawwrite с ней идет diskio.dll и сорцы тоже http://www.chrysocome.net/rawwrite

Качнул, разбираюсь...

Это сообщение отредактировал(а) BenGan - 4.11.2011, 22:05
PM MAIL   Вверх
tzirechnoy
Дата 6.11.2011, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



[QUOTE=BenGan,4.11.2011,  21:59]
Цитата


 hDevice =CreateFile("\\.\G:", GENERIC_READ, FILE_SHARE_WRITE,0,


Обратных слэшэй в имени файла маловато. Компилятор C в строковых константах использует обратный слэш как экранирующий символ для вызова спец.возможностей (напр. \n переводится в перевод строки (0x13)), соответственно, каждый настоящий обратный слэш должэн удваиваться:
 "\\\\.\\G:"
PM MAIL   Вверх
BenGan
Дата 6.11.2011, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

 "\\\\.\\G:"


Спасибо! Заработало!

Цитата

есть прожка rawwrite с ней идет diskio.dll и сорцы тоже http://www.chrysocome.net/rawwrite

Здесь код на паскале, часть кода спрятана в DLL.

Я пользуюсь : http://www.dharmanitech.com/
Там, в самом низу страницы, исходники процедур создания файла под FAT32 и хорошие ссылки по описанию самой FAT.
Может кому полезно будет.



Это сообщение отредактировал(а) BenGan - 6.11.2011, 11:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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