AHTOXA 18 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Кто, что скажет? Надо задать #define _CODE_PAGE 866 , и в терминалке выставить шрифт TERMINAL, тоже в DOS-кодировке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gryphus 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Надо задать #define _CODE_PAGE 866 , и в терминалке выставить шрифт TERMINAL, тоже в DOS-кодировке. Да, действительно, так работает. осталось только перекодировку клавиш как-то осуществить - в моих терминалках этого нет (terminal v1.9 by Br@y++, в ZOC как-то коряво), но в целом проблема ясна: У русских, как всегда, особенный путь :) : короткие имена Windows хранит в 866-й кодировке, длинные - в 1251-й, путаница ещё та. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба ZOC как-то коряво.. Да ну? Совершенно нормальная реализация. Причем у подавляющего большинства и мыслей о других кодировках нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gryphus 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Да ну? Согласен, у подавляющего большинства мыслей становится всё меньше и меньше...:) Лично мне не удалось нормально настроить этот самый ZOC и больше на это время тратить не буду. Что касается локализации файловой системы, то дело это оказалось нетривиальным и ресурсоемким - всё зависит от конкретной задачи. Просто я хотел бы узнать как другие решали эти проблемы в своих разработках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 5 марта, 2017 Опубликовано 5 марта, 2017 · Жалоба Вопрос по Petit FatFs. Для отладки использую Proteus VSM 8.4 с виртуальной CD/MMC картой. На карте есть единственный файл 7 с хвостиком килобайт, к которому осуществляется доступ в разные произвольные места. Поначалу все работает: файл открывается, из него читаются данные (все верно читается), функция pf_lseek отрабатывает разные смещения. Но потом по неизвестным причинам pf_lseek начинает выдавать ошибку FR_DISK_ERR, и все, разумеется, перестает работать. При пошаговой отладке добрался до функции send_cmd(CMD17, sector), которая и вызывает эту ошибку. В начале эта функция вызывается многократно успешно, а ошибку возвращает, если sector == 512 (просто обратил внимание, не факт, что именно это значение играет роль). Что-то никак не могу понять, куда копать... подскажите, пожалуйста, если не сложно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 10 марта, 2017 Опубликовано 10 марта, 2017 · Жалоба А в железе пробовали отлаживать? Симулятор, конечно, хорошо, но не всегда помогает разобраться в причинах. Так же, можете добавить в обработчике ошибок (кстати, у себя в коде не нашёл такового - похоже, функции писались с бодуна, но работают почти без сбоев) сделать вывод ответа карты - так проще разобраться в ошибках. На ARM - такое крайне желательно. Предполагаю, что используете SPI? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 14 марта, 2017 Опубликовано 14 марта, 2017 · Жалоба Делал и в железе - результат 100% тот же самый. И вывод всех статусов карты и т.п. делал, т.е. из Chan-овской библиотеки в нужных местах выводил, что возвращается... толку ноль - не понимаю, что не так. Когда сектор равен 512 в функции lseek, в конце функции карта просто не отвечает - приходит 0xFF и точка... хоть убей... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlanDrakes 1 17 марта, 2017 Опубликовано 17 марта, 2017 · Жалоба Обработчики функций библиотеки дописывали сами? Попробую привести пример своих, может поможет чем. Сразу поясню: сталкивался с какими-то весёлыми косяками при работе с несколькими картами (всеми имевшимися на тот момент в наличии), код привёл к тому виду, в котором он сейчас. На тот момент всё работало стабильно, читалось, писалось. Попробуйте, может и заработает. DRESULT disk_read ( uint8_t pdrv, /* Physical drive nmuber to identify the drive */ uint8_t *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { <...> //case MMC : //// translate the arguments here //result = MMC_disk_read(buff, sector, count); result = 0; if (count == 1) { result = SPI_SD_READ_SECTOR_buf(sector, m_buf); } else { while (count>0) { result = SPI_SD_READ_SECTOR_buf(sector, m_buf); count--; sector++; }; }; return result; <...> uint8_t SPI_SD_READ_SECTOR_buf(uint32_t Sector, uint8_t* buff) { uint16_t i; uint32_t calc_Addr; SPI_Select_CARD(); if (!(sd_raw_card_type & (1 << SD_RAW_SPEC_SDHC))) // Если карта НЕ является SDHC - добавляем 9 бит к адресу. { // !SDHC calc_Addr = ((Sector+249) << 9); // DaFaq?! But will not work in other case. } else { // SDHC calc_Addr = (Sector+2048); // And one more DAFAQ! }; i = SPI_SD_SendCMD(CMD_READ_SINGLE_BLOCK, calc_Addr); // Передаём вычисленный адрес карте card_answ_at_read = i; // DEBUUUUUG! if(i) { SPI_UnSelect_CARD(); // Отпускаем карту return R_ERR; // Возвращаем ошибку. =( }; while (SPI_Rd_Byte() != 0xFE); // Ждём начала блока. Чаще всего до 30-40 итераций. for (i=0; i<512; i++) // Читаем байт и заносим его в буфер (512 байт) { *buff = SPI_Rd_Byte(); buff++; }; SPI_Rd_Byte(); // CRC SPI_Rd_Byte(); // CRC (2) // IGNORED T_T /* deaddress card */ SPI_UnSelect_CARD(); // Отпускаем карту (шину) SPI_Rd_Byte(); // Тактирование. return R_OK; }; ЗЫ: Обратите внимание на комментарии около странных переводов значений секторов. Особенно, +249 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться