STM32 IAP 在线更新程序 为什么有时行 有时又不行 感觉不可靠 问题解决

搞了一天才发现 在MDK设置选项中有个"linker"选项卡 , 需要在Project->Options->Linker中将Use Memory Layout from Target Dialog前面的复选框勾上  一切就正常了

Use Memory Layout from Target Dialog这个选项有个“分散加载文件”的概念。

下边的三段话是我从网上摘抄的(MDK程序下载到flash--分散加载文件scatter),大概了解了一下,以后如果会用到这方面的知识再来深入研究。

     前边三个分散加载文件是从别的地方拷过来的,用在自己的程序中可能会有问题,因为如果不修改它的话就固定了加载地址和运行地址,如果程序简单又比较小的话可能不会有问题,但是如果不修改它的话就固定了加载地址和运行地址,如果程序简单又比较小的话可能不会有问题,但是如果程序代码比较大,超出了那三个加载文件的定义大小可能就会出问题,解决办法很简单,直接修改.sct文件直到适合你的代码。

      更好的办法是自己定义一个分散加载文件,在MDK中勾选Use Memory Layout from Target  Dialog,那么加载文件就是从你定义的ROM和RAM等地址得到的,如果不勾选的话就是通过你自己指定的加载文件来加载。

      如果分散加载文件不对的话,可能出现的问题就是明明是在SRAM中调试程序(我想我找到困惑自己很久的问题了,就是是用Jlink调试程序的时候,程序下载到SRAM,而不是SDRAM!!),但是却能神奇的通过flash downloader下载到Flash中去,刚开始也是不解,后来才发现是加载文件有错误,我使用了一个指定的flash.sct文件,这样的话我设置的irom和iram都无效了,编译器直接根据我指定的flash.sct来分布代码和加载代码,又查看了一下flash.sct文件是加代码加载到flash笛子空间的,这就是为什么在工程中也能通过Flash Downloader工具烧写代码带Flash中去的原因。

原文地址:https://www.cnblogs.com/ransn/p/5122030.html