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

To give better visibility on the answered topics, please click on "Accept as Solution" on the reply which solved your issue or answered your question.
Saket_Om

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