Здравствуйте товарищи форумчане. Чтобы не плодить веток, решил задать свой вопрос тут. По-маленьку ковыряю ченовскую библиотеку fatfs + usb + stm32f103. Появилась необходимость в проекте записать достаточно большой объем данных, около 128кб. При попытке решения проблемы "в лоб", столкнулся с проблемой зависания проги. Виснет в библиотечной функции вот тут:
______________________________________
Код
if(HCD_IsDeviceConnected(&USB_OTG_Core))
{
do
{
status = USBH_MSC_Write10(&USB_OTG_Core,(BYTE*)buff,sector,512 * count);
USBH_MSC_HandleBOTXfer(&USB_OTG_Core, &USB_Host);
if(!HCD_IsDeviceConnected(&USB_OTG_Core))
{
return RES_ERROR;
}
}
while(status == USBH_MSC_BUSY );
}
__________________
или еще вот тут:
__________________
Код
if(HCD_IsDeviceConnected(&USB_OTG_Core))
{
do
{
status = USBH_MSC_Read10(&USB_OTG_Core, buff,sector,512 * count);
USBH_MSC_HandleBOTXfer(&USB_OTG_Core ,&USB_Host);
if(!HCD_IsDeviceConnected(&USB_OTG_Core))
{
return RES_ERROR;
}
}
while(status == USBH_MSC_BUSY );
}
__________________________________________________________________
причину, к сожалению понять не могу. Код процедуры записи привел ниже:
__________________________________________________________________
Код
f_mount(0, &fatfs);
f_opendir(&dir, "0:/");
f_open(&file, "FILE1.TXT", FA_OPEN_EXISTING | FA_WRITE | FA_READ);
f_lseek(&file, file.fsize);
for (uint8_t i=0; i<255; i++)
{
f_write(&file, arr, 512, &WritenBytes);
f_sync(&file);
cntr ++;
}
f_close(&file);
f_mount(0, NULL);
________________________________
P.S. проверку статусов операции делал, все ок, ни одной ошибки. сейчас представил самый простой на мой взгляд вариант реализации.
P.P.S. зависать начинает в вышеуказанных местах всегда по разному, иногда сразу, а иногда несколько раз процедура успешно завершается, а после, при очередном вызове, виснет.
Сообщение отредактировал IgorKossak - Oct 31 2013, 19:24
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!