当前位置:网站首页>Records on the use of easyflash v3.3

Records on the use of easyflash v3.3

2022-07-07 10:39:00 Sky_ Lannister

Open source address https://github.com/armink/EasyFlash
A post by an open source Author :https://www.amobbs.com/thread-5624863-1-1.html

It has reached V4 了 , But here's the thing ST Of L4 Series MCU , Cannot write in reverse order , So it's still used V3 edition

The space is full occasionally when using , It's especially hard to reproduce , Just go through the source code

  1. About wear balance
    Not a real wear balance , Just keep erasing and reading to a sector first , When this sector is broken , Translate another sector down , And as long as there is a write or erase failure in this sector, it will shift to the next sector ,V4 Implementation and V3 Totally different

  2. About env Delete and reset :
    /* remain ENV move forward */
    memcpy(del_env, del_env + del_env_length, remain_env_length);
    After deleting a key value pair , The cache data is uniformly shifted forward Then set the end address ;
    The cache area after the currently used address (env_cache) Size erase , Then write the shifted data from the current address
    save_cur_using_data_addr Is before writing 16 Byte lead data to the system area ;
    When deleting, there will be a space to save a set of data that will be saved every time you reset

  3. About power failure protection :
    Power failure protection is realized by software , It is not saved after detecting that the voltage of the single chip microcomputer is lower than a certain value , But the call ef_save_env_wt When , How many days after a write k Backup , Write the first few at a time k Really save , Back and forth twice , One is always the preservation of another , But this causes a waste of space

  4. About get_env_user_used_size(void) The understanding of the :
    static size_t get_env_user_used_size(void) {
    if (get_env_detail_end_addr() > get_cur_using_data_addr()) {
    return get_env_detail_end_addr() - get_cur_using_data_addr();
    } else {
    return 0;
    }
    }
    Why get the used size , Is to subtract the address in use from the end address , I can't understand the positive and reverse order ?
    Actually, it should be understood as get_env_detail_end_addr() Is the end address used , It always changes according to the size of the write , and get_cur_using_data_addr(); Are two fixed values , That is, if it weren't for the backup area , If it weren't for the real storage area

  5. About env Space allocation :
    Power down and wear balance mode , The distribution of the front and rear memory areas is consistent :1 System area 、2 Data area
    Pay attention to the cache RAM size 、 Environment variable area 、 The size of the minimum erased sectors and their relationship

  6. About the size of the persistent data area :
    default_env_set_size: Always saved KEY-VALUE When resetting, write it to the last area of the cache
    Use set_env_detail_end_addr(get_env_detail_end_addr() + env_str_len); Set the stored content

原网站

版权声明
本文为[Sky_ Lannister]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207070823248600.html