杰发科技AC7801——Flash模拟EEP内存(2)

2024-08-26 23:36

本文主要是介绍杰发科技AC7801——Flash模拟EEP内存(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 默认配置在1000个地址存储1000个数据

配置如下

计算地址

查看地址内容,等到打印完成

计算符合,从0-999共计1000

2. 修改配置在65536地址存储65536个数据

配置还是这个

因为传进去的地址是uint16_t,因此最大值是65536,写65536个数据在65536个地址里面

写到5200左右会每7s写一个数据,读的话还是很快

按照公式计算,512*10是10页,即会写到0x14000+0x5000

然而实际上是写到0x14747就结束了,大概1863个,还不到1页

3. 问题分析

我们重启一下,看下写到哪里开始慢起来,还是5270这个地方

大概在写到3000时候暂停(直接连接atclinktool会暂停读写数据)

写到了0x17190

减去14000,共计12688个地址

一个数据占用2个字节,加一个地址位2字节。相当于写一个数据需要4个字节空间。

也就是说最多写了3172个数据。

3127个数据,写的是

确实和我们结束时候的数据一样,但是跟地址似乎对应不上

起始是因为为了区别地址和数据,在数据上加了0x99导致

我们再来一次测试,直接写4096个数据

0x99是153和数据对上了

写到了0x1098,又对上了

4. 分析,写慢的原因

因为初始化的页数过多,因此我们只初始化一页测试看看结果,初始化一页,写4097个数据

结果显示到第650左右写的数据开始变慢,大约200ms左右写一次

看到从13800开始写了数据,

2048个地址,正好是1页,并且地址是倒着写的

并且是从03e开始写,也就是从地址62开始写

测试一下正好写完一页的,512多2个数据的,发现在510写完后会变慢。

考虑到EEP在当页起始需要去掉2个数据位置,正好写完一页开始变慢。

因此,上面的分析来看,写慢的原因找到了。

5. 交换写,备份区

我们看到上面有个备份区,看下这个是什么

测试512个数据,即第二个数据应该会放在前一页

发现前一页也因为有2个字节占用,重新从14000开始写,最后一个地址蟹道乐14000当页,而14000这个地址是之前被000地址占用了

为了方便看结果,单独写了两个地址的数据。

这里把地址0也给个特定值,发现在写完之后被覆盖了

因此如果要写1024个字节地址的话,最好就多初始化一页,初始化为512*2,即使用2页

最高写到400

备份区写到402

初始化的区域写到401,地址0的6666被覆盖掉

测试一下最高能到多少不会被覆盖

我们测试2页,也就是512*2=1024个,再少一个1023应该就OK了

因为后面加了2个固定数据,因此1023-2=1021,循环写1021个,0地址没有被覆盖

实际上最后一个8888没写上

回头看上面的计算少算了一个校验位,应该是-2才对

因此改为1024-2-2=1020,参考前面的少了个8888的位置,1020肯定是对的。

看到和计算的一样,备份区没有开始写,并且数据完整。

这篇关于杰发科技AC7801——Flash模拟EEP内存(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110007

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe