CH32V307 Bootloader 編譯時提示FLASH 長度不夠?

情況:

1.實際的BOOTLOADER 編譯后的代碼長度只有15K
2,設置20K FLASH

MEMORY
{
FLASH?(rx)?:?ORIGIN?=?0x00000000,?LENGTH?=?20K
RAM?(xrw)?:?ORIGIN?=?0x20000000,?LENGTH?=?64K
}


3.? 在程序中有兩個長的USB用的 RAM DMA 緩沖區(qū) 每個16K長度

? ?在LD 文件中,無特別指出這個 DMADATA段在哪里?

_

_attribute__?((aligned(16)))?UINT8?LONG_Databuf1[?16384?]??__attribute__((section(".DMADATA")));?/*?端點2數(shù)據(jù)發(fā)送緩沖區(qū)?*/
__attribute__?((aligned(16)))?UINT8?LONG_Databuf2[??16384?]??__attribute__((section(".DMADATA")));?/*?端點2數(shù)據(jù)發(fā)送緩沖區(qū)?*/


編譯后,連接提示 DMADATA 段不適合FLASH 長度,? 這個DMADATA 段是RAM的跟FLASH有什么關系?


4.? 把 DMA段的屬性去掉,改為如下,編譯 及l(fā)ink都正常了,程序運行也正常

__attribute__?((aligned(16)))?UINT8?LONG_Databuf1[?16384?]?;/*?端點2數(shù)據(jù)發(fā)送緩沖區(qū)?*/
__attribute__?((aligned(16)))?UINT8?LONG_Databuf2[??16384?];?/*?端點2數(shù)據(jù)發(fā)送緩沖區(qū)?*/


這樣問題來了??__attribute__((section(".DMADATA")));有什么用呢??會不會影響USB的接收發(fā)送

段屬性加上時的錯誤如下圖:


1638005366953104.jpg



取掉DMADATA屬性,編譯正常

1638005381123450.jpg


原因是沒有屬性時這個緩沖區(qū)屬于bss數(shù)據(jù),不需初始化, 加上這個屬性后,這塊DMADATA數(shù)據(jù)放在DATA段中了,所以在FLASH占用了同樣大小的初始化數(shù)據(jù)。

該如何設這個屬性才是正確的?



你好,Ld中并沒有定義這個段,所有編譯器編譯連接的時候不會把這個數(shù)組按照bss段處理,而是類似于data,導致編譯的時候flash變大,ram也變大,上電CPU從flash搬運到ram中執(zhí)行。__attribute__((section(".DMADATA")))這個屬性可以去掉,對你的功能不會有任何影響。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频