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