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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> FAT16/32 для ARM, FatFS, efs писали PC-программисты
Sagittarius
сообщение Sep 12 2012, 14:04
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Здравствуйте.

К проекту на LPC2378 надо подключить FAT16/32 на SD. Функции для самой SD написал, выбираю библиотеку файловой системы. Смотрел FATFS R0.09 Чена, EFSL-0.3.6
Неприятно удивило использование операций деления и взятия остатка от деления вместо сдвигов и наложения маски, даже для проверки на четность. Возможно кто то подскажет другие библиотеки, написанные для МК. Требуется чтение/запись/создание FS.

С уважением,
Игорь.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 12 2012, 14:18
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sagittarius @ Sep 12 2012, 18:04) *
Неприятно удивило использование операций деления и взятия остатка от деления вместо сдвигов и наложения маски, даже для проверки на четность.

Если бы код файловой системы преимущественно состоял из подобных операций, тогда еще можно было бы понять Ваше удивление. Но на деле их мало, выполняются достаточно редко. Так зачем пытаться отжать пол-копейки, усложняя при этом код?
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Sep 12 2012, 14:33
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Цитата(aaarrr @ Sep 12 2012, 18:18) *
Если бы код файловой системы преимущественно состоял из подобных операций, тогда еще можно было бы понять Ваше удивление. Но на деле их мало, выполняются достаточно редко. Так зачем пытаться отжать пол-копейки, усложняя при этом код?


в FatFs их много, и это операции деления на степень 2, которые просто заменяются сдвигом. Если в остальном проекте нет операций деления то нет и смысла тащить для этого библиотеку из за избыточности в реализации файловой системы. Да и просто когда в коде встречается abc/4 вместо abc>>2 это как то неприятно :-)
Go to the top of the page
 
+Quote Post
SII
сообщение Sep 12 2012, 14:36
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Ну, такие операции деления (на языках высокого уровня, в частности, на Си) любой сколько-нибудь вменяемый компилятор соптимизирует сам.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Sep 12 2012, 16:16
Сообщение #5


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



ну так сделайте патч и отошлите его автору.

sm.gif в тему: http://habrahabr.ru/post/150982/
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Sep 12 2012, 20:08
Сообщение #6


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Sagittarius @ Sep 12 2012, 17:04) *
К проекту на LPC2378 надо подключить FAT16/32 на SD. Функции для самой SD написал, выбираю библиотеку файловой системы...

Неприятно удивило использование операций деления и взятия остатка от деления вместо сдвигов и наложения маски...


Keil умножения и деления на степени двойки однозначно поменяет на сдвиги автоматически.
Лучшая библиотека, ИМХО, будет от Micrium-а.
Сравнивал по скорости и стабильности с двумя другими коммерческими.
Сравнивать лучше на хорошо изношенных SD картах (после записи и стирания 1000 и более файлов).
Тогда все особенности FS ярче проявляются.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Sep 13 2012, 06:45
Сообщение #7


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

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(Sagittarius @ Sep 12 2012, 17:04) *
Смотрел FATFS R0.09 Чена, EFSL-0.3.6


К китайцу и вопросы все biggrin.gif ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Allregia
сообщение Sep 14 2012, 11:13
Сообщение #8


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(hd44780 @ Sep 13 2012, 08:45) *
К китайцу и вопросы все biggrin.gif ...


Он вообще-то японец а не китаец sm.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 16 2012, 20:26
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(AlexandrY @ Sep 12 2012, 23:08) *
Keil умножения и деления на степени двойки однозначно поменяет на сдвиги автоматически.

IAR также. Причём, даже сложнозапутанные, совсем не явные. Я недавно столкнулся с куском дерьмокода. biggrin.gif
Показал ребятам, как нельзя делать. Переписал, как правильно ... Кроме красоты, сэкономил пару байт. На приличном куске. Не поверил. Переписывал несколько раз, самыми разными способами. Результат практически не менялся.
Go to the top of the page
 
+Quote Post
Sagittarius
сообщение Sep 17 2012, 06:20
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 26-01-06
Из: СПб
Пользователь №: 13 659



Цитата(SasaVitebsk @ Sep 17 2012, 00:26) *
IAR также. Причём, даже сложнозапутанные, совсем не явные.


Если значение известно при компиляции то да, но если делитель берется из переменной, то уже вызов udiv, udivmod. То что в этой переменной будет только степень 2 компилятор предугадать уже не может. Или такое выражение (из FatFS):
if (ifptr > 0 && (ofs - 1) / bcs >= (ifptr - 1) / bcs ){...}
деление вызывается 2 раза. Так что пока пользую FatFS, потом руками все поправлю.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 26 2012, 18:14
Сообщение #11


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



А что за контроллер используете? Библиотеки какие-то - армы давно деление на уровне инструкций имеют.
Go to the top of the page
 
+Quote Post
polyname
сообщение Sep 26 2012, 19:58
Сообщение #12


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

Группа: Участник
Сообщений: 147
Регистрация: 18-05-12
Пользователь №: 71 915



Цитата
армы давно деление на уровне инструкций имеют
не все.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 26 2012, 20:15
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Sagittarius @ Sep 17 2012, 09:20) *
Если значение известно при компиляции то да, но если делитель берется из переменной, то уже вызов udiv, udivmod. То что в этой переменной будет только степень 2 компилятор предугадать уже не может.

Компилятор угадать не сможет. А вы то как угадаете?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 27 2012, 05:24
Сообщение #14


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(SII @ Sep 12 2012, 18:36) *
Ну, такие операции деления (на языках высокого уровня, в частности, на Си) любой сколько-нибудь вменяемый компилятор соптимизирует сам.

+1


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MBR
сообщение Sep 27 2012, 06:36
Сообщение #15


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

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Также плюсую. Автору стоит почаще смотреть в ассемблерные листинги - без базовых представлений о том, как работает компилятор можно запросто плодить неэффективный код, совершенно об этом не представляя.
Go to the top of the page
 
+Quote Post

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

 


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


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