Skip to main content
Graduate
October 16, 2024
Question

STM32H723zgt6 - Azure Filex

  • October 16, 2024
  • 1 reply
  • 828 views

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

}

    This topic has been closed for replies.

    1 reply

    Technical Moderator
    October 16, 2024

    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

    rkuma.21Author
    Graduate
    October 17, 2024

    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