当前位置:网站首页>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
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 differentAbout 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 resetAbout 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 spaceAbout 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 areaAbout 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 relationshipAbout 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
边栏推荐
- CAS机制
- @Configuration, use, principle and precautions of transmission:
- 高级软考(网络规划设计师)该如何备考?
- 施努卡:机器人视觉抓取工作原理 机器视觉抓取
- The variables or functions declared in the header file cannot be recognized after importing other people's projects and adding the header file
- Application of OpenGL gllightfv function and related knowledge of light source
- SQL Server 知识汇集9 : 修改数据
- 1324:【例6.6】整数区间
- Jump to the mobile terminal page or PC terminal page according to the device information
- Trajectory planning for multi robot systems: methods and Applications Overview reading notes
猜你喜欢
ArrayList thread insecurity and Solutions
【机器学习 03】拉格朗日乘子法
[牛客网刷题 Day5] JZ77 按之字形顺序打印二叉树
1323:【例6.5】活动选择
Using tansformer to segment three-dimensional abdominal multiple organs -- actual battle of unetr
Leetcode-304: two dimensional area and retrieval - matrix immutable
对word2vec的一些浅层理解
555电路详解
Application of OpenGL gllightfv function and related knowledge of light source
[STM32] solution to the problem that SWD cannot recognize devices after STM32 burning program
随机推荐
BigDecimal value comparison
那些易混淆的概念(三):function和class
[detailed explanation of Huawei machine test] tall and short people queue up
MySQL insert data create trigger fill UUID field value
移动端通过设置rem使页面内容及字体大小自动调整
Unable to open kernel device '\.\vmcidev\vmx': operation completed successfully. Reboot after installing vmware workstation? Module "devicepoweron" failed to start. Failed to start the virtual machine
高级软考(网络规划设计师)该如何备考?
P1223 排队接水/1319:【例6.1】排队接水
SQL Server 知识汇集9 : 修改数据
Adb 实用命令(网络包、日志、调优相关)
中级软件评测师考什么
[homework] 2022.7.6 write your own cal function
leetcode-303:区域和检索 - 数组不可变
Gym installation pit records
施努卡:机器视觉定位技术 机器视觉定位原理
求方程ax^2+bx+c=0的根(C语言)
String formatting
Multisim--软件相关使用技巧
Using tansformer to segment three-dimensional abdominal multiple organs -- actual battle of unetr
0x0fa23729 (vcruntime140d.dll) (in classes and objects - encapsulation.Exe) exception thrown (resolved)