程序描述如下:
1、options for target...配置,Linker -> use memory layout from target dialog復選框勾選,編譯報錯如下:
Error: L6220E: Load region LR_IROM1 size (55964 bytes) exceeds limit (55296 bytes). Region contains 24369 bytes of padding and 0 bytes of veneers (total 24369 bytes of linker generated content).
采用這種記憶體布局的方式,我的單片機記憶體不夠用(STM32F103),記憶體只給了54K。
2、去除use memory layout from target dialog復選框,編譯未報錯,生成的是*.bin檔案夾,非bin檔案,記憶體大小如下:
Program Size: Code=30224 RO-data=https://bbs.csdn.net/topics/656 RW-data=3364 ZI-data=4068
3、程式中有一處使用的絕對地址,代碼如下。將其注釋,編譯正常,生成*.bin檔案。與use memory layout from target dialog復選框狀態無關;
static const u8 Version[4] __attribute__((at(0x08011700)))={0x01,0x2,0x3,0x4};//用于IAP檔案識別
問題:
1、__attribute__會產生padding,機制到底是怎么樣的,為啥占這么多資料?
2、以上,問題如何解決?我需要bin檔案和絕對地址內的標識用于IAP,無法擴大記憶體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/285190.html
標籤:單片機/工控
