STM32 IAP 在线更新程序问题
扫描二维码
随时随地手机看文章
搞了一天才发现 在MDK设置选项中有个"linker"选项卡 ,需要在Project->Options->Linker中将UseMemoryLayoutfromTargetDialog前面的复选框勾上 一切就正常了
UseMemoryLayoutfromTargetDialog这个选项有个“分散加载文件”的概念。
下边的三段话是我从网上摘抄的(MDK程序下载到flash--分散加载文件scatter),大概了解了一下,以后如果会用到这方面的知识再来深入研究。
前边三个分散加载文件是从别的地方拷过来的,用在自己的程序中可能会有问题,因为如果不修改它的话就固定了加载地址和运行地址,如果程序简单又比较小的话可能不会有问题,但是如果不修改它的话就固定了加载地址和运行地址,如果程序简单又比较小的话可能不会有问题,但是如果程序代码比较大,超出了那三个加载文件的定义大小可能就会出问题,解决办法很简单,直接修改.sct文件直到适合你的代码。
更好的办法是自己定义一个分散加载文件,在MDK中勾选Use MemoryLayout from Target Dialog,那么加载文件就是从你定义的ROM和RAM等地址得到的,如果不勾选的话就是通过你自己指定的加载文件来加载。
如果分散加载文件不对的话,可能出现的问题就是明明是在SRAM中调试程序(我想我找到困惑自己很久的问题了,就是是用Jlink调试程序的时候,程序下载到SRAM,而不是SDRAM!!),但是却能神奇的通过flash downloader下载到Flash中去,刚开始也是不解,后来才发现是加载文件有错误,我使用了一个指定的flash.sct文件,这样的话我设置的irom和iram都无效了,编译器直接根据我指定的flash.sct来分布代码和加载代码,又查看了一下flash.sct文件是加代码加载到flash笛子空间的,这就是为什么在工程中也能通过Flash Downloader工具烧写代码带Flash中去的原因。