This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/LAUNCHXL-CC3235S:无法使用串行闪存 API 增大串行闪存(Mx25R3235F)中的文件大小。

Guru**** 2544130 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/905359/ccs-launchxl-cc3235s-not-able-to-increase-file-size-in-serial-flash-mx25r3235f-using-serial-flash-api

器件型号:LAUNCHXL-CC3235S
主题中讨论的其他器件:CC3235S

工具/软件:Code Composer Studio

大家好、团队!

我对串行闪存 API http://dev.ti.com/tirex/content/simplelink_academy_cc32xxsdk_3_40_02_00/modules/wifi/wifi_secure_file_system/wifi_secure_file_system.html 有疑问 、我正关注它、以便在我的板载(cc3235)串行闪存(Mx25R3235F)中进行编程。 一切正常、我能够创建、读取、写入/覆盖和删除文件。

但问题是、API 创建的文件有100个字节对我的应用程序来说是不够的、是否有任何方法可以使用相同的 API 来增加文件的大小、我是通过增加文件来尝试的。

#define MAX_FILE_SIZE 100*5. 

文件已成功创建、但缺少内容。 请告诉我如何增大文件大小、这是可行的吗?

提前感谢  

等待您的回复

Sarju Bhatnagar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    最大文件大小仅在首次创建文件时才相关(FsOpen (filename、(sl_FS_create | sl_FS_CREASE_FAILSAFE | sl_FS_CREASE_MAX_SIZE (MAX_FILE_SIZE))、token);

    创建后、无法更改此值(即、如果打开文件进行读取、则无法更改最大大小)。

    我不确定您的意思是缺少什么内容? 这只会创建文件并分配其存储空间。 然后再编写内容 shold。

    BR、

    Kobi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Kobi!

    非常感谢您的回复,是的,“最大文件大小仅在创建文件时才相关”。 这就是我首先使用 MAX_FILE_SIZE 500字节创建文件的原因。 已成功创建文件。

    其次,“内容丢失意味着”,我使用以下函数在单个函数中创建文件并编写文件。

    /*创建失效防护文件*/
    _i32 FD = sl_FsOpen (test_filename、
    (SL_FS_create | SL_FS_CREASE_FAILSAFE | SL_FS_CREASE_MAX_SIZE (MAX_FILE_SIZE)| G_accessMode)、
    &g_tokes[sl_FS_TOKEN_MASTER]);
    if (FD < 0)
    {
    UART_PRINT ("sl_FsOpen error:%d\n\r"、FD);
    }
    否则
    {
    ST_WriteFile (FD、strlen (originalContent)、originalContent);
    RetVal = sl_FsClose (FD、0、0、0);
    IF (FD < 0)
    {
    UART_PRINT ("sl_FsClose 错误:%d\n\r"、RetVal);
    }
    }
    

    它也在创建文件和写入文件,但当我读取文件时,它是空白的。 这是我所说的。 希望现在您能理解。

    如果我做了一些错误、请纠正我的问题。

    再次感谢您的观看。

    正在等待您的回复

    Sarju Bhatnagar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不确定什么是 st_WriteFile()。

    可能 fsClose 失败(返回值检查不正确)。

    请参阅 SDK。 有许多使用文件系统 API 的示例。 下面是另一个示例(在代码将文件称为 NVS 存储的情况下):

    int16_t NVS_get (char * ptype、uint16_t length、uint8_t* pValue)
    {
    int32_t lFileHandle;
    内部 RC;
    
    lFileHandle =(int32_t) sl_FsOpen ((uint8_t *) ptype、sl_FS_Read、0);
    if (lFileHandle < 0)
    {
    if (lFileHandle == sl_error_FS_file_no_exists)
    {
    log_trace ("NVS_get: file %s,status=sl_error_FS_file_no_exists",ptype);
    }
    其他
    {
    log_trace ("NVS_get: error sl_FsOpen %s、Status=%d"、ptype、lFileHandle);
    }
    返回(int16_t) lFileHandle;
    }
    
    RC =(int16_t) sl_FsRead (lFileHandle,0,(uint8_t *) pValue,length);
    如果(RC < 0)
    {
    LOG_TRACE ("NVS_GET:错误 sl_FsRead、Status=%d"、RC);
    返回 RC;
    }
    
    RC = sl_FsClose (lFileHandle、NULL、NULL、0);
    如果(RC < 0)
    {
    log_trace ("NVS_get: error sl_FsClose,Status=%d",RC);
    返回 RC;
    }
    
    返回 rc;
    }
    
    int16_t NVS_set (char * ptype、uint16_t length、uint8_t* pValue)
    {
    int32_t lFileHandle;
    内部 RC;
    uint32_t ulToken = 0;
    int32_t OpenFlags = 0;
    
    /*不要删除文件 sl_FsDel (ptype、ulToken);*/
    
    /*以捆绑包的形式打开文件!!*/
    OpenFlags = SL_FS_CREATE;
    OpenFlags |= sl_FS_OVERWRITE;
    OpenFlags |= SL_FS_CREATE_NOSIGNATURE;
    OpenFlags |= SL_FS_CREASE_FAILSAFE;
    OpenFlags |= SL_FS_WRITE_BUNDLE_FILE;
    
    lFileHandle = sl_FsOpen ((uint8_t *) ptype、OpenFlags| sl_FS_CREATE_MAX_SIZE (length)、(unsigned long *)&ulToken);
    if (lFileHandle < 0)
    {
    LOG_TRACE ("NVS_SET:错误 sl_FsOpen %s、Status=%d"、ptype、lFileHandle);
    返回(int16_t) lFileHandle;
    }
    
    RC =(int16_t) sl_FsWrite (lFileHandle,0,(uint8_t *) pValue,length);
    如果(RC < 0)
    {
    LOG_TRACE ("NVS_SET:错误 sl_FsRead、Status=%d"、RC);
    返回 RC;
    }
    
    RC = sl_FsClose (lFileHandle、NULL、NULL、0);
    如果(RC < 0)
    {
    LOG_TRACE ("NVS_SET:错误 sl_FsClose、Status=%d"、RC);
    返回 RC;
    }
    
    返回 RC;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是 st_WriteFile()函数

    静态 int st_WriteFile (_i32 fileHandle、_u32 length、_const char * buffer)
    {
    Int RetVal;
    _i32偏移= 0;
    
    while (offset < length)
    {
    //将数据写入打开的文件
    RetVal = sl_FsWrite (fileHandle、offset、(_u8 *) buffer、length);
    如果(RetVal <= 0)
    {
    UART_PRINT ("sl_FsWrite 错误:%d\n\r"、RetVal);
    返回 RetVal;
    }
    其他
    {
    OFFSET +=返回值;
    length -= RetVal;
    }
    
    }
    UART_PRINT ("写入%d 个字节...\n\r"、偏移量);
    返回偏移量;
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的支持、我已经准备好了、现在我可以增加文件的大小。 之前我增加了文件的大小  

    #define MAX_FILE_SIZE 100*5. 

    就像这样、文件也被创建和写入、但我无法读取文件、但后来我意识到我必须更改  

    ST_ReadFile (FD、MAX_FILE_SIZE); 

    函数的 MAX_FILE_SIZE 设置为 strlen (sizeOfMyData)并解决了我的问题。

    再次感谢您的支持。

    此致

    Sarju Bhatnagar