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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> Вопрос по FatFs от мистера ChaN'а
AHTOXA
сообщение Nov 19 2009, 09:24
Сообщение #61


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Арк К @ Nov 19 2009, 12:17) *
Кто, что скажет?


Надо задать
Код
#define _CODE_PAGE    866

, и в терминалке выставить шрифт TERMINAL, тоже в DOS-кодировке.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Арк К
сообщение Nov 19 2009, 12:22
Сообщение #62


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 8-05-08
Пользователь №: 37 363



Цитата(AHTOXA @ Nov 19 2009, 12:24) *
Надо задать
Код
#define _CODE_PAGE    866

, и в терминалке выставить шрифт TERMINAL, тоже в DOS-кодировке.

Да, действительно, так работает. осталось только перекодировку клавиш как-то осуществить - в моих терминалках этого нет (terminal v1.9 by Br@y++, в ZOC как-то коряво), но в целом проблема ясна:
У русских, как всегда, особенный путь smile.gif : короткие имена Windows хранит в 866-й кодировке, длинные - в 1251-й, путаница ещё та.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 19 2009, 12:30
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Арк К @ Nov 19 2009, 15:22) *
ZOC как-то коряво..

Да ну? Совершенно нормальная реализация. Причем у подавляющего большинства и мыслей о других кодировках нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Арк К
сообщение Nov 19 2009, 19:11
Сообщение #64


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 8-05-08
Пользователь №: 37 363



Цитата(zltigo @ Nov 19 2009, 15:30) *
Да ну?

Согласен, у подавляющего большинства мыслей становится всё меньше и меньше...smile.gif
Лично мне не удалось нормально настроить этот самый ZOC и больше на это время тратить не буду.
Что касается локализации файловой системы, то дело это оказалось нетривиальным и ресурсоемким - всё зависит от конкретной задачи.

Просто я хотел бы узнать как другие решали эти проблемы в своих разработках.
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 5 2017, 20:53
Сообщение #65


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Вопрос по Petit FatFs.

Для отладки использую Proteus VSM 8.4 с виртуальной CD/MMC картой. На карте есть единственный файл 7 с хвостиком килобайт, к которому осуществляется доступ в разные произвольные места. Поначалу все работает: файл открывается, из него читаются данные (все верно читается), функция pf_lseek отрабатывает разные смещения. Но потом по неизвестным причинам pf_lseek начинает выдавать ошибку FR_DISK_ERR, и все, разумеется, перестает работать.

При пошаговой отладке добрался до функции send_cmd(CMD17, sector), которая и вызывает эту ошибку. В начале эта функция вызывается многократно успешно, а ошибку возвращает, если sector == 512 (просто обратил внимание, не факт, что именно это значение играет роль).

Что-то никак не могу понять, куда копать... подскажите, пожалуйста, если не сложно...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
AlanDrakes
сообщение Mar 10 2017, 14:39
Сообщение #66


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

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



А в железе пробовали отлаживать?
Симулятор, конечно, хорошо, но не всегда помогает разобраться в причинах.
Так же, можете добавить в обработчике ошибок (кстати, у себя в коде не нашёл такового - похоже, функции писались с бодуна, но работают почти без сбоев) сделать вывод ответа карты - так проще разобраться в ошибках.
На ARM - такое крайне желательно.
Предполагаю, что используете SPI?
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 14 2017, 18:31
Сообщение #67


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Делал и в железе - результат 100% тот же самый. И вывод всех статусов карты и т.п. делал, т.е. из Chan-овской библиотеки в нужных местах выводил, что возвращается... толку ноль - не понимаю, что не так. Когда сектор равен 512 в функции lseek, в конце функции карта просто не отвечает - приходит 0xFF и точка... хоть убей...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
AlanDrakes
сообщение Mar 17 2017, 15:24
Сообщение #68


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

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



Обработчики функций библиотеки дописывали сами?

Попробую привести пример своих, может поможет чем.
Сразу поясню: сталкивался с какими-то весёлыми косяками при работе с несколькими картами (всеми имевшимися на тот момент в наличии), код привёл к тому виду, в котором он сейчас. На тот момент всё работало стабильно, читалось, писалось.
Попробуйте, может и заработает.

CODE
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
Go to the top of the page
 
+Quote Post

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

 


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


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