cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H723zgt6 - Azure Filex

rkuma.21
Associate III

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,Screenshot 2024-10-16 175158.png

 

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);

}

2 REPLIES 2
Saket_Om
ST Employee

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

If your question is answered, please close this topic by clicking "Accept as Solution".

Thanks
Omar

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?

 

 

 app_filex.png