最近在LPC2109上調試ENC28J60,協議棧使用的是UIP,剛開始用的telnet服務,能夠正常編譯運行。然后換成webserver提示:
enc28j60.axf: Error: L6406E: No space in execution regions with .ANY selector matching uip.o(.bss). enc28j60.axf: Error: L6407E: Sections of aggregate size 0x2204 bytes could not fit into .ANY selector(s).
很是奇怪,然后把芯片換成大一點的發現ZI-data增加了很多。
然后看了網上查了下關於ZI-DATA的信息,又看了MDK的手冊,下面是手冊對於這幾個數據的解釋:
RO Data Shows how many bytes are occupied by read-only data. This is in addition to the inline data included in the Code (inc. data) column. RW Data Shows how many bytes are occupied by read-write data. ZI Data Shows how many bytes are occupied by zero-initialized data.
以及他們的存儲信息:
Example 2. Image component size informatioCode (inc. data) RO Data RW Data ZI Data De 3712 1580 19 44 10200 7436 Object Totals 0 0 16 0 0 0 (incl. Generated) 0 0 3 0 0 0 (incl. Padding) 21376 648 805 4 300 10216 Library Totals 0 0 6 0 0 0 (incl. Padding) =============================================================================== Code (inc. data) RO Data RW Data ZI Data Debug 25088 2228 824 48 10500 17652 Grand Totals 25088 2228 824 48 10500 17652 ELF Image Totals 25088 2228 824 48 0 0 ROM Totals =============================================================================== Total RO Size (Code + RO Data) 25912 ( 25.30kB) Total RW Size (RW Data + ZI Data) 10548 ( 10.30kB) Total ROM Size (Code + RO Data + RW Data) 25960 ( 25.35kB)
看了網上的篇文章,大概是講對這些數據的存儲的測試驗證。
然后自己動手在MDK下測試了下,發現數據很奇怪。
#include <stdio.h> char ix[8]; int main(void) { printf("%c",ix[1]); return 0; }
剛開始用ix[10]->ix[20]->ix[30]測試,發現結果很奇怪。
通過對初始化為0的變量的增加:發現ZI-data是以8為單位增加的。
不解,以前的實驗室的師兄告訴我可能是ARM的數據存儲是以字為單位,覺得有道理,嘗試,定義數組ix[8]->...->ix[12]->ix[16]->ix[20]->ix[24]->ix[25]逐個增加編譯
Program Size: Code=4016 RO-data=44 RW-data=20 ZI-data=1508 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1524 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1524 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1524 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1524 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1524 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1524 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1524 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1524 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1532 ........... Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1532 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1532 Program Size: Code=4016 RO-data=44 RW-data=12 ZI-data=1540
MDK的ZI-data是以8bytes為單位增加。