2024-10-16 05:29 AM
Hi,
I am using Azure RTOS for my STM32H723ZGT6 to write log file to my USB pendrive.
so, i am using usbx msc host and filex example code from github.
File created successfully, but not opened for write, because my code returns FX_PTR_ERROR due to the (file_control_block_size != sizeof(FX_FILE).
I got my file_control_block_size as 457 but sizeof(FX_FILE) is 480.
How get my file_control_block_size as 480, am i missing something.
Please find the code and screen shot below,
UINT _fxe_file_open(FX_MEDIA *media_ptr, FX_FILE *file_ptr, CHAR *file_name, UINT open_type, UINT file_control_block_size)
{
UINT status;
FX_FILE *current_file;
ULONG open_count;
/* Check for a null media or file pointer. */
if ((media_ptr == FX_NULL) || (media_ptr -> fx_media_id != FX_MEDIA_ID) || (file_ptr == FX_NULL) || (file_control_block_size != sizeof(FX_FILE)))
{
return(FX_PTR_ERROR);
}
/* Check for an invalid open type. */
if ((open_type != FX_OPEN_FOR_READ) && (open_type != FX_OPEN_FOR_READ_FAST) && (open_type != FX_OPEN_FOR_WRITE))
{
return(FX_ACCESS_ERROR);
}
/* Check for a valid caller. */
FX_CALLER_CHECKING_CODE
/* Get protection. */
FX_PROTECT
/* Check for a duplicate file open. */
/* Loop to search the list for the same file handle. */
current_file = media_ptr -> fx_media_opened_file_list;
open_count = media_ptr -> fx_media_opened_file_count;
while (open_count--)
{
/* See if a match exists. */
if (file_ptr == current_file)
{
/* Release protection. */
FX_UNPROTECT
/* Return error. */
return(FX_PTR_ERROR);
}
/* Move to the next opened file. */
current_file = current_file -> fx_file_opened_next;
}
/* Release protection. */
FX_UNPROTECT
/* Call actual file open service. */
status = _fx_file_open(media_ptr, file_ptr, file_name, open_type);
/* Open is complete, return status. */
return(status);
}
2024-10-16 08:24 AM
Hello @rkuma.21,
You are using the function _fxe_file_open(). Please use the function fx_file_open().
Please refer to the example Projects/STM32H743I-EVAL/Applications/FileX/Fx_Nand_Write_Read_File
2024-10-16 09:14 PM
Hi Saket
Thanks for the reply,
Please find attached code used by myself for open file function mention below,
vopen_file(FX_MEDIA *fx_media)
{
UINT file_status;
/*Open ".txt" file */
FX_FILE bcpap_file;
file_status = fx_file_open(fx_media, &bcpap_file, pclog_file_name, FX_OPEN_FOR_WRITE);
/* Check the file open status */
if (file_status == FX_SUCCESS)
{
vseek_file_pos(uwseek_pos);
}
else
{
/* Close File if error */
vclose_file();
ubfile_state = OPEN_LOG_FILE;
}
}
I am creating new usblog.c and added vopen_file (mentioned below) where my code stuck duo to the my file_control_block_size and sizeof(FX_FILE) was not matched, while I'm copy and use the same function in app_filex.c then file_control_block_size and sizeof(FX_FILE) is matched with 480.
How, if we need to use fx_file_open function only at app_filex.c file?