Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 嵌入式:访问未写入的ROM地址内容_Memory_Embedded_Access Violation_Flash Memory_Autosar - Fatal编程技术网

Memory 嵌入式:访问未写入的ROM地址内容

Memory 嵌入式:访问未写入的ROM地址内容,memory,embedded,access-violation,flash-memory,autosar,Memory,Embedded,Access Violation,Flash Memory,Autosar,我正在使用Aurix TC234的嵌入式设备上工作。 在其上运行的My(AUTOSAR)软件在启动时需要在特定ROM地址范围内进行一些检查 在刷新我的软件十六进制文件期间,未写入必须检查的数据。 这意味着必须先写入地址范围,然后才能在该设备上闪存我的软件 我的最坏情况是: 有人忘了刷新地址范围。我的软件会在启动过程中被刷新并访问内存。 在这种情况下,就会出现陷阱 我的问题: 是否有一种安全的方法来检查特定的ROM地址范围,如果它被写入或没有? 有可能处理这种陷阱吗 我不熟悉TC234,但如果在任

我正在使用Aurix TC234的嵌入式设备上工作。 在其上运行的My(AUTOSAR)软件在启动时需要在特定ROM地址范围内进行一些检查

在刷新我的软件十六进制文件期间,未写入必须检查的数据。 这意味着必须先写入地址范围,然后才能在该设备上闪存我的软件

我的最坏情况是: 有人忘了刷新地址范围。我的软件会在启动过程中被刷新并访问内存。 在这种情况下,就会出现陷阱

我的问题: 是否有一种安全的方法来检查特定的ROM地址范围,如果它被写入或没有? 有可能处理这种陷阱吗

我不熟悉TC234,但如果在任何嵌入式设备上访问未写入的闪存会导致陷阱,我会感到惊讶。写入闪存和未写入闪存的唯一区别在于后者应该写入所有闪存(假设闪存开始擦除)。您应该能够简单地检查数据块中的所有字节是否为0xFF

如果您可能有最初未擦除的闪存,您可以向数据块添加一个检查字段,可能包含块其余部分的CRC值。启动时,对照CRC字段检查块内容

编辑:如果您确实遇到了陷阱,我认为这是由于您的代码未经验证就使用了块中的数据,导致了类似于在数组中使用无效索引或错误指针的情况。 回答收回了。请参阅评论。

我不熟悉TC234,但如果在任何嵌入式设备上访问未写入的闪存会导致陷阱,我会感到惊讶。写入闪存和未写入闪存的唯一区别在于后者应该写入所有闪存(假设闪存开始擦除)。您应该能够简单地检查数据块中的所有字节是否为0xFF

如果您可能有最初未擦除的闪存,您可以向数据块添加一个检查字段,可能包含块其余部分的CRC值。启动时,对照CRC字段检查块内容

编辑:如果您确实遇到了陷阱,我认为这是由于您的代码未经验证就使用了块中的数据,导致了类似于在数组中使用无效索引或错误指针的情况。
回答收回了。请参阅注释。

经过几次检查后,对于带有ECC错误的TC29X流,ROM可按如下方式处理:

  • 启用SMU警报
  • 从SMU捕获ISR中的ECC错误
  • 无初始RAM区域中的存储标志
  • 必须调用SW reset(ECC不能退出陷阱)
  • 在下一次启动中检查标志值

希望此帮助和类似的解决方案能在您的micro上提供。

经过几次检查后,对于带有ECC错误的TC29X ROM流,可以按如下方式处理:

  • 启用SMU警报
  • 从SMU捕获ISR中的ECC错误
  • 无初始RAM区域中的存储标志
  • 必须调用SW reset(ECC不能退出陷阱)
  • 在下一次启动中检查标志值

希望此帮助和类似的解决方案能在您的micro上提供。

我的软件基于AUTOSAR。我需要再次检查是谁造成了这个陷阱。你有使用AUTOSAR的经验吗?我使用一个固定的内存地址来访问内存,这是绝对正确的。这个Aurix系列有整个RAM和ROM区域ECC保护,所以访问未初始化区域(在本上下文中未刷新)将导致@Ferhat所述的陷阱。在这种情况下,我将得到纠正并收回我的答案。我将删除它,但保留它,这样这些评论就不会丢失。很好的提示@Blueman。这可能就是原因。有没有办法正确处理这些ECC陷阱?我的软件是基于AUTOSAR的。我需要再次检查是谁造成了这个陷阱。你有使用AUTOSAR的经验吗?我使用一个固定的内存地址来访问内存,这是绝对正确的。这个Aurix系列有整个RAM和ROM区域ECC保护,所以访问未初始化区域(在本上下文中未刷新)将导致@Ferhat所述的陷阱。在这种情况下,我将得到纠正并收回我的答案。我将删除它,但保留它,这样这些评论就不会丢失。很好的提示@Blueman。这可能就是原因。是否有正确处理这些ECC陷阱的想法?是否有任何理由不添加额外的部分,用默认闪存内容覆盖所需的地址范围?然后再写其他数据?@Blueman闪烁的顺序是固定的。首先,必须对数据进行刷新,然后再对软件进行更新。我的软件中的默认闪存内容将覆盖正确闪存的附加数据。我不熟悉ECC更正。是否可能影响ECC?我可以为ROM中的特定地址范围停用它吗?我对micro的这个版本不太熟悉,也没有直接使用陷阱,但据我记忆所及,TC27X和TC29X有可能正确退出ECC陷阱,也没有可能在define range上禁用ECC,或者根本不禁用ECC。很难提供更多的细节,因为英飞凌发布的每一份文档都是保密的,我只能在办公室里查阅。这听起来很有趣。你能给我一些关于这个的关键词吗?我将于周一在office的手册中搜索它们。是否有任何理由不添加包含默认闪存内容的所需地址范围的附加部分?然后再写其他数据?@Blueman闪烁的顺序是固定的。首先,必须对数据进行刷新,然后再对软件进行更新。我的软件中的默认闪存内容将覆盖正确闪存的附加数据。我不熟悉ECC更正。是否可能影响ECC?我可以为ROM中的特定地址范围停用它吗?我对micro的这个版本不太熟悉,也没有直接使用陷阱,但据我记忆所及,TC27X和TC29X有可能正确退出ECC陷阱,也没有可能