реклама на сайте
подробности

 
 
> FatFS пофиксена
megajohn
сообщение Oct 22 2013, 14:02
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Added selection of character encoding on the file. (_STRF_ENCODE)
Added f_closedir().
Added forced full FAT scan for f_getfree(). (_FS_NOFSINFO)
Added forced mount feature with changes of f_mount().
Improved behavior of volume auto detection.
Improved write throughput of f_puts() and f_printf().
Changed argument of f_chdrive(), f_mkfs(), disk_read() and disk_write().
Fixed f_write() can be truncated when the file size is close to 4GB.
Fixed f_open(), f_mkdir() and f_setlabel() can return incorrect error code.

http://elm-chan.org/fsw/ff/ff10.zip


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BratherLU
сообщение Oct 24 2013, 06:23
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 103
Регистрация: 16-05-06
Пользователь №: 17 126



Спрошу здесь дабы новую тему не создавать.
Вообщем в своем приложении нужно было создать таблицу разделов на SD карте и отформатировать - посмотрел код f_fdisk().
глаз зацепился за следуюжее:
CODE

/* Set partition table */
...
p[2] = (BYTE)((b_cyl >> 2) + 1); /* Start sector */
p[3] = (BYTE)b_cyl; /* Start cylinder */
...
p[6] = (BYTE)((e_cyl >> 2) + 63); /* End sector */
p[7] = (BYTE)e_cyl; /* End cylinder */

При удачном стечении обстоятельств в p[2] (p[6]) для номера цилиндра окажутся не те значения.
Если использовать LBA - нет проблем. А если через CHS - то ...
Собственно вопрос: я придираюсь или в f_disk() есть ошибка при заполнении полей таблицы разделов?
PS: В своем коде сделал примерно так: p[6] = ((BYTE)((e_cyl >> 2)&(0xC0)) | 63);
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Oct 25 2013, 10:47
Сообщение #3


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(BratherLU @ Oct 24 2013, 10:23) *
..
CODE

p[6] = (BYTE)((e_cyl >> 2) + 63); /* End sector */

PS: В своем коде сделал примерно так:
p[6] = ((BYTE)((e_cyl >> 2)&(0xC0)) | 63);


для номера цилиндра окажутся не те значения....есть ошибка..?


не вдаваясь логику работы...
>>2 есть сдвиг в право на две позиции бит. насколько я понимаешь - старшие биты заполняются нулями.
имеем
e_cyl = xxxx xxxx
после сдвига (деление на 4)
e_cyl = 00xx xxxx
в оригинале имеем
00xx xxxx + 0011 1111 (т.е. полностью будет звучать так (Z/4 + 63)
в Вашем варианте
(00xx xxxx & 1100 0000) + 0011 1111
что после наложения маски даст
0000 0000 + 0011 1111
что является всегда константой
0011 1111 т.е. всегда(!) 63

ик?

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 11:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016