STM32 IAP 在線更新程序問(wèn)題
搞了一天才發(fā)現(xiàn) 在MDK設(shè)置選項(xiàng)中有個(gè)"linker"選項(xiàng)卡 ,需要在Project->Options->Linker中將UseMemoryLayoutfromTargetDialog前面的復(fù)選框勾上 一切就正常了
UseMemoryLayoutfromTargetDialog這個(gè)選項(xiàng)有個(gè)“分散加載文件”的概念。
下邊的三段話是我從網(wǎng)上摘抄的(MDK程序下載到flash--分散加載文件scatter),大概了解了一下,以后如果會(huì)用到這方面的知識(shí)再來(lái)深入研究。
前邊三個(gè)分散加載文件是從別的地方拷過(guò)來(lái)的,用在自己的程序中可能會(huì)有問(wèn)題,因?yàn)槿绻恍薷乃脑捑凸潭思虞d地址和運(yùn)行地址,如果程序簡(jiǎn)單又比較小的話可能不會(huì)有問(wèn)題,但是如果不修改它的話就固定了加載地址和運(yùn)行地址,如果程序簡(jiǎn)單又比較小的話可能不會(huì)有問(wèn)題,但是如果程序代碼比較大,超出了那三個(gè)加載文件的定義大小可能就會(huì)出問(wèn)題,解決辦法很簡(jiǎn)單,直接修改.sct文件直到適合你的代碼。
更好的辦法是自己定義一個(gè)分散加載文件,在MDK中勾選Use MemoryLayout from Target Dialog,那么加載文件就是從你定義的ROM和RAM等地址得到的,如果不勾選的話就是通過(guò)你自己指定的加載文件來(lái)加載。
如果分散加載文件不對(duì)的話,可能出現(xiàn)的問(wèn)題就是明明是在SRAM中調(diào)試程序(我想我找到困惑自己很久的問(wèn)題了,就是是用Jlink調(diào)試程序的時(shí)候,程序下載到SRAM,而不是SDRAM!!),但是卻能神奇的通過(guò)flash downloader下載到Flash中去,剛開始也是不解,后來(lái)才發(fā)現(xiàn)是加載文件有錯(cuò)誤,我使用了一個(gè)指定的flash.sct文件,這樣的話我設(shè)置的irom和iram都無(wú)效了,編譯器直接根據(jù)我指定的flash.sct來(lái)分布代碼和加載代碼,又查看了一下flash.sct文件是加代碼加載到flash笛子空間的,這就是為什么在工程中也能通過(guò)Flash Downloader工具燒寫代碼帶Flash中去的原因。