我按照Bootloader教程操作,输出BIN文件达到几百兆的大小。
经过查看HEX文件,发现有如下内容:
[C] 纯文本查看 复制代码 :020000043004C6
:1000000000000000000000000000000000000000F0
:1000100000000000000000000000000000000000E0
:1000200000000000000000000000000000000000D0
:1000300000000000000000000000000000000000C0
:1000400000000000000000000000000000000000B0
:1000500000000000000000000000000000000000A0
:020000043004C6
:100060000000000000000000000000000000000090
:100070000000000000000000000000000000000080
:100080000000000000000000000000000000000070
:100090000000000000000000000000000000000060
:1000A0000000000000000000000000000000000050
:1000B0000000000000000000000000000000000040
从内容来看,应该是因为如下代码,导致HEX中有将这部分全局数组清0的代码。
[C] 纯文本查看 复制代码 /* Ethernet Rx DMA 描述符 */
//__attribute__((at(0x30040000))) ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT];
ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((section(".ARM.__at_0x30040000")));
/* Ethernet Tx DMA 描述符 */
//__attribute__((at(0x30040060))) ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT];
ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((section(".ARM.__at_0x30040060")));
/* Ethernet 接收缓冲 */
//__attribute__((at(0x30040200))) uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE];
uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE] __attribute__((section(".ARM.__at_0x30040200")));
由于0x3004000 与 0x08100000,地址相差很大,估计在bin文件中产生了大量的空白,导致BIN文件非常的大。
现在疑问是
1、为什么全局变量清0,会在HEX中占据空间?
2、如何让编译器不生成相关代码,不然BIN太大了,根本不可能放到TF卡一类的存储介质上实现bootloader的功能。
|