镜像地址和实际地址的作用分别是做什么啊?


我在烧写程序结束后,去读取烧写的数据和flash中的数据时,发现对比的flash数据是镜像地址中的时候,对比的数据会出错;对比的数据是flash的实际地址时,数据检验通过,这是为什么啊!!

按我的理解,实际地址和镜像地址的数据应该是一样的,是时序的原因吗?

新人求大佬详细讲解一下,谢谢!!

Parents
  • 这块你要重点看一下,strartup.c 这个文件,flash数据区域的访问属性:把文件拉到头看一下,这个属性的意思,你看一下属性是如何设置的。一般如果是 non_sharealbe, 那么数据是对的吧。如果是outer_shareble, 那么数据落盘会有时延,每隔一段时间统一落盘。看 N2L的镜像地址是outer_shareble, 那么数据落盘有时延,就会有不一致的时候。outer_shareble的意义在于访问数据更快。

  • 修正一下昨天说outer_shareable的意义:可以被多个处理器核心访问,不是更快。这意味着对于同一片外部内存区域的访问可以在多个处理器之间共享数据副本。在这种情况下,如果一个处理器对共享区域进行的修改影响到了共享数据的一致性,需要通过同步机制来保证数据一致性。 N2L是单核MPU,我觉得镜像数据区域的数据,也没有什么特别有用处,不必关注它吧。

Reply
  • 修正一下昨天说outer_shareable的意义:可以被多个处理器核心访问,不是更快。这意味着对于同一片外部内存区域的访问可以在多个处理器之间共享数据副本。在这种情况下,如果一个处理器对共享区域进行的修改影响到了共享数据的一致性,需要通过同步机制来保证数据一致性。 N2L是单核MPU,我觉得镜像数据区域的数据,也没有什么特别有用处,不必关注它吧。

Children
  • 谢谢大佬,对我帮助很大。

    应该是镜像区数据会在实际地址区数据变化后进行同步,我读取镜像地址的时候,同步还未进行,导致数据不同步。

    后面我直接读取实际地址区域数据,然后校验没什么问题;

    若是真的要读取镜像区地址的数据进行校验,那么应该让程序延时一会,或者有什么标志位的存在能够提醒同步完毕。这一点我没有尝试过,不确定行不行