Приветствуем на Форум Херсона. Форум Херсонской молодежи.. На данный момент Вы находитесь на форуме как Гость и имеете очень ограниченные возможности и права. Что бы писать или отвечать в темах, загружать картинки, файлы на форуме Вам нужно зарегистрироваться, что совершенно бесплатно. Регистрация очень быстрая, не откладывайте эту процедуру! Если возникнут проблемы с регистрацией напишите нам. |
|
Программирование Все вопросы по написанию программ |
|
Опции темы |
04.12.2017, 10:43 | #1 (Ссылка на пост) | |||||||||
Si vis pacem, para bellum
Пол:
Адрес: Херсон
Благодарил(а): 9,965
Благодарили 31,499 раз в 8,875 постах
Галерея:
0
Вес репутации: 345
|
Загальні запитання
Колупаю зараз драйвер Fat32. Щось він некоректно читає деякі накопичувачі, зокрема ЮСБ-флешку, форматовану віндамисьомими.
По порядку. Драйвер читає MBR та намагається інтерпретувати. Знаходить записи щодо розділів: Цитата:
І на цьому етапі трапляється якесь фіаско. А саме - параметр початкового LBA розділу (@ 0x1D6). Тут він дорівнює 0x80 або 128 dec. (с) WinHEX Початковий сектор же в нас насправді 0х100 або 256 dec. І WinHEX цю магію вміє. Драйвер чомусь вважає що номер першого сектору розділу тотожний початковому LBA (я донедавна теж так вважав. Та навіть сам WinHEX називає це "Sectors preceding partition". WTF?!) та шукає файлову таблицю у секторі 0х80, хоча насправді вона лежить за адресою 0х100. І так, якщо просто зсунути число на один розряд вліво (чи домножити на два) все працює вірно. Але очевидно що додатково множити на константу - то є скажений костиль і так робити не можна. Я підозрюю що там має бути не константа А якесь число яке звідкись береться. Я ХЗ, чи то якась нова специфікація яку ми з цим драйвером не знаємо, чи то що. Хто знає? * * * Все, розібрався. Треба було одразу звернути увагу на ідентифікатор типу розділу, який 0х05 замість очікуваного 0х0В. Тобто падлюча вінда замість того щоб зробити просто первинний розділ з ФАТом, робить логічний розділ за адресою 0х80, у якому розміщає таблицю з вказівником на єдиний розділ з ФАТом за адресою 0х80 від початку цього розділу (а не у абсолютних координатах), тобто насправді 0х80+0х80 = 0х100.* Р - Раціоналізаторство. А драйвер маленький і не може у логічні розділи. Доведеться додати в нього трішечки магічної рекурсії. От як правильно задане запитання допомагає знайти відповідь * - і це черговий раз демонструє, чому у жодному разі не можна використовувати костилі які надають просте рішення проблеми, суть якої наразі не зрозуміла. ПС Пропоную тему залишити відкритою та приліпити щоб мені було соромно що я одразу не подумав про логічні розділи не плодити теми задля одноразових запитань.
__________________
У світі багато брудного й заразного, Але той хто хоче - лишається чистим. Последний раз редактировалось VoVaN, 04.12.2017 в 12:47. Причина: https://en.wikipedia.org/wiki/Partition_type |
|||||||||
|
Сказали Спасибо пользователю VoVaN за этот пост: | Davlat (04.12.2017) |
04.12.2017, 11:52 | #2 (Ссылка на пост) | ||||||||
Свой В Доску
Пол:
Благодарил(а): 183
Благодарили 265 раз в 146 постах
Галерея:
0
Вес репутации: 14
|
Слушай, я конечно ничего не смыслю в этом, но что-то мне подсказывает, что нужно не умножать на 2, а прибавлять 1CF 1D0 по формуле. Создай еще один раздел, и если там так же параметр 1D6 будет 128, то значит это уже смещение внутри раздела.
Почитай с 20 стр Почесав затылок, юзер дописал через 4 минуты ой, не заметил, что уже решилось. В книжке в примере 1 дескриптор не пустой, как у тебя. |
||||||||
|
Сказали Спасибо пользователю Lukas за этот пост: | VoVaN (04.12.2017) |
04.12.2017, 18:59 | #3 (Ссылка на пост) |
Извините, я на тракторе!
Пол:
|
Это ты FatFS мучаешь?
__________________
Какая разница из какого места растут руки, если они золотые. |
|
04.12.2017, 19:06 | #4 (Ссылка на пост) | ||||||||
Si vis pacem, para bellum
Пол:
Адрес: Херсон
Благодарил(а): 9,965
Благодарили 31,499 раз в 8,875 постах
Галерея:
0
Вес репутации: 345
|
__________________
У світі багато брудного й заразного, Але той хто хоче - лишається чистим. |
||||||||
|
04.12.2017, 19:23 | #5 (Ссылка на пост) |
Извините, я на тракторе!
Пол:
|
юзай http://ru.bmstu.wiki/Chan_FAT
тю... это ужэ одно и тоже Оо раньше было разное
__________________
Какая разница из какого места растут руки, если они золотые. |
|
04.12.2017, 21:02 | #6 (Ссылка на пост) | ||||||||
Свой В Доску
Пол:
Благодарил(а): 183
Благодарили 265 раз в 146 постах
Галерея:
0
Вес репутации: 14
|
|||||||||
|
04.12.2017, 21:57 | #7 (Ссылка на пост) | ||||||||
Si vis pacem, para bellum
Пол:
Адрес: Херсон
Благодарил(а): 9,965
Благодарили 31,499 раз в 8,875 постах
Галерея:
0
Вес репутации: 345
|
Я щось теж не зміг зрозуміти де тут сміятися
По-перше, я не знаю що там у якого Джекі Чана, мова йшла про бібліотеку яку роздають ST. По-друге - обґрунтування моєї оцінки міститься у першому псті, і це не єдина підстава так вважати.
__________________
У світі багато брудного й заразного, Але той хто хоче - лишається чистим. |
||||||||
|
05.12.2017, 10:02 | #8 (Ссылка на пост) | ||||||||
Si vis pacem, para bellum
Пол:
Адрес: Херсон
Благодарил(а): 9,965
Благодарили 31,499 раз в 8,875 постах
Галерея:
0
Вес репутации: 345
|
Нібито патч
ff.c, рядок #3064 Код:
br[i] = pt[PTE_System] ? ld_dword(pt + PTE_StLba) : 0; Код:
switch (pt[PTE_System]) { case 0: // empty record br[i] = 0; break; case 0x05: // extended/CHS // here must be converter CHS->LBA, but it was fucked off. Because CHS sux! case 0xF0: // extended/LBA bsect = ld_dword(pt + PTE_StLba); if (check_fs(fs, bsect) == 2) // I have no partition, but I have something better. Image of partition! br[i] = bsect + ld_dword(fs->win + MBR_Table + PTE_StLba); else br[i] = 0; break; case 0x0B: // clearly, FAT default: // Some other mysterious CHUPACABRA. Let`s leave it alone. br[i] = ld_dword(pt + PTE_StLba); break; } По-перше треба уточнити щодо специфікації використання типів 05/F0 та їх адресацій, а також додати конвертор адреси з циліндрів у логічні блоки (але, на скільки я міг помітити, інформація дублюється, то ж у моєму випадку працює і так). По-друге - тут контролюється тільки перший логічний розділ з розширеної таблиці; якщо раптом буде задіяно другий (хто знає цю вінду) - його не побачить, то ж було б непогано додати гілку або цикл (щоправда це викличе складнощі з місцевою реалізацію мульті-партишену). По-третє - насправді існує набагато більше ідентифікаторів типу ФС (в тому числі і сумісних), і варто було б їх теж уміти вірно інтерпретувати. Але це вже інша історія. ПС Ні, серйозно, підхід "якщо тип ФС не нуль - значить це ФАТ" - це нормально?!
__________________
У світі багато брудного й заразного, Але той хто хоче - лишається чистим. |
||||||||
|
10.01.2019, 10:58 | #9 (Ссылка на пост) | ||||||||
Si vis pacem, para bellum
Пол:
Адрес: Херсон
Благодарил(а): 9,965
Благодарили 31,499 раз в 8,875 постах
Галерея:
0
Вес репутации: 345
|
Математики, допоможіть!
Контекст: Є деяка точка F у декартових координатах. Її з'єднують з початком координат відрізки A та B (вони рівні за довжиною, тобто A=B, та їх довжина відома). Треба визначити кути α та β. Ця задача має тривіальне рішення через теорему Піфагора та трішечки тригонометрії: визначаємо довжину С, ділимо навпіл, визначаємо кут A0C і далі до кінця - нічого складного, шкільний рівень. У кінці ми маємо один кут через арксинус, а інший через суму курів трикутника. Задача: Те ж саме, але у векторах. Є вектор V, який є різницею векторів С та С' V = C'-C Де, в свою чергу, С = А+В, С' = А'+В'. Так само як і у першому прикладі |A|=|B|=|A'|=|B'|=const. Треба знайти ті ж самі α та β. На перший погляд це зводиться до першої тривіальної задачі, адже вектор то є дві точки. Але проблема в тому, що ця математика описує фізичну систему, внутрішній стан якої змінюється згідно з вектором V. Для керування цією системою потрібно знати природу зміни α та β протягом переходу стану системи по вектору V. Тобто у результаті треба отримати якесь аналітичне вираження α та β, яке відповідає вектору V. Наприклад, функцію від часу (якщо сприймати вектор V як переміщення фізичної точки на площині): α(t), β(t), що відповідають значенням кутів продовж переходу по вектору та Δα(t), Δβ(t), що відповідає швидкості зміни кута на кожній точці цього переходу. Інтерполяція у багатьох проміжних точках, на жаль, для цього не дуже підходить: сигнали керування α та β мають бути виключно точними та неперервними. Я чимось заднім підозрюю що ця задача так само тривіально вирішується із застосуванням диференційного числення, але ніасіліл. Є ідеї як це зробити?
__________________
У світі багато брудного й заразного, Але той хто хоче - лишається чистим. |
||||||||
|
14.01.2019, 13:54 | #10 (Ссылка на пост) | |||||||||
Si vis pacem, para bellum
Пол:
Адрес: Херсон
Благодарил(а): 9,965
Благодарили 31,499 раз в 8,875 постах
Галерея:
0
Вес репутации: 345
|
Цитата:
Якщо перейти у полярну систему координат (α;R) то кут β залежить лише від довжини |R|. Інші кути розраховуються арифметично. І перше і друге легко диференціюється. Далі, цільовий вектор виражається у вигляді параметричних лінійних функцій від загального коефіцієнту t[0;1] (можна уявити що це час - тоді вектор відповідає рівномірному руху матеріальної точки на площині). Тепер залишається лише підставити параметричні функції у α(t) та R(t) після чого продиференціювати. Але це вже якось трохи пізніше О_о Начебто виглядає не дуже складним (хоча і дуже громіздким). Кінець-кінцем сподіваюся отримати першу похідну для обох кутів по dt. ПС це відчуття коли спаяти електроніку значно простіше ніж написати їй математичний апарат.
__________________
У світі багато брудного й заразного, Але той хто хоче - лишається чистим. |
|||||||||
|
Эти 5 пользователей сказали Спасибо VoVaN за хороший пост: | BlindGuard (23.01.2019), Marichello (15.01.2019), PhoeniXX (14.01.2019), static (23.01.2019), ustas (14.01.2019) |
14.01.2019, 17:09 | #11 (Ссылка на пост) | ||||||||
Щас сменю себе статус
Пол:
Благодарил(а): 679
Благодарили 1,699 раз в 901 постах
Галерея:
0
Вес репутации: 32
|
|||||||||
|
15.01.2019, 13:20 | #12 (Ссылка на пост) | ||||||||
Модератор
Пол:
Благодарил(а): 30,810
Благодарили 37,603 раз в 8,037 постах
Галерея:
0
Вес репутации: 401
|
Это не сам себе, а поведение адекватного человека который делится тем что может пригодиться и другим.
А вот флудить везде - это за гранью адекватности.
__________________
Нужно делать так, как нужно. А как не нужно, делать не нужно. |
||||||||
|
16.01.2019, 09:33 | #13 (Ссылка на пост) | ||||||||
Si vis pacem, para bellum
Пол:
Адрес: Херсон
Благодарил(а): 9,965
Благодарили 31,499 раз в 8,875 постах
Галерея:
0
Вес репутации: 345
|
Слава роботам та штучному інтелекту!
God bless Wolfram|Alpha. Дуже зручний інструмент для усілякої наукової роботи, особливо коли у виші мав 4- з матану. ... Тепер похідні можна підставити у вищенаписані вирази, завантажити цього монстра у мікроконтролер і дивитися у який бік з нього піде дим ))) Як не сильно піде - пізніше покажу що з цього вийшло.
__________________
У світі багато брудного й заразного, Але той хто хоче - лишається чистим. Последний раз редактировалось VoVaN, 16.01.2019 в 09:47. |
||||||||
|
23.01.2019, 00:50 | #14 (Ссылка на пост) | |
Извините, я на тракторе!
Пол:
|
Цитата:
А вообще мне кажется мусье перемудрил
__________________
Какая разница из какого места растут руки, если они золотые. |
|
|
23.01.2019, 12:03 | #15 (Ссылка на пост) | ||||||||
Si vis pacem, para bellum
Пол:
Адрес: Херсон
Благодарил(а): 9,965
Благодарили 31,499 раз в 8,875 постах
Галерея:
0
Вес репутации: 345
|
Мені тут швидкість не потрібна, воно повільно міняється
Є простіші ідеї як забезпечити гладке керування двома параметрами?
__________________
У світі багато брудного й заразного, Але той хто хоче - лишається чистим. |
||||||||
|
23.01.2019, 21:21 | #16 (Ссылка на пост) |
Извините, я на тракторе!
Пол:
|
Я если чесно не совсем понимаю задачу. Можно реальный пример что меняется и за чем надо следить?
__________________
Какая разница из какого места растут руки, если они золотые. |
|