Ich habe hier den DP83848 als externen Ethernet Chip. Wie kommt es zu diesem Fehler? build/default/production/_ext/867694782/ETHPIC32IntMac.o: Link Error: Could not allocate section .bss, size = 15608 bytes, attributes = bss Link Error: Could not allocate data memory collect2: ld returned 1 exit status make[2]: *** [dist/default/production/pm-eth.X.production.hex] Error 1 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2 Ich hab schon ne Menge raus genommen in der TCP config aber in den PIC32 muss doch mehr rein passen als in den PIC18F97J60 :-)
Was mich auch wundert das er _inline_ nicht kennt, wo wird das normalerweise eingestellt?
Was mich echt wundert der selbe Stack passt in einen PIC18F97J60 mit gerade mal ~3k SRAM aber nicht in einen PIC32 mit 65k SRAM ? Gibt es hier irgendwelche Schalter etc... die hier was optimieren? Dazu musste ich einen HEap Speicher beim Linker eingeben, wieviel benötige ich da und vorallem auch für was wird dieser im TCP Stack verwendet? Das hier alleine gab mir 16kb Speicher //#define STACK_USE_DYNAMICDNS_CLIENT Kann ich irgendwie sehen in welchen Dateien soviel Speicher benötigt wird?
Schau mal in der TCPIP STack Guide nach, da gibt ein Kapitel zu.
Da gibts sogar optionen fuer den Linker, aber er generiert einfach keine Map file. In welcher TCP Stack Hilfe? der Helpfile? der AN833? The map file shows information relating to where objects were positioned in memory. It is useful for confirming that user-defined linker options were correctly processed, and for determining the exact placement of objects and functions. The option to create a map file in the linker is -Map file (or -Wl,-Map=file if passed to the driver),
Ich hab mir mal PIC18 Projekte angesehen da wird das so gemacht: -m"$(BINDIR_)$(TARGETBASE).map" mich wundert nur das es der XC8 macht aber der XC32 scheinbar nicht. Es muss irgendwo eine Einstellung dafür geben also gut es ist einfach nur -M dann schreibt ers aus.
1 | kseg1 Boot-Memory Usage |
2 | section address length [bytes] (dec) Description |
3 | ------- ---------- ------------------------- ----------- |
4 | .reset 0xbfc00000 0x1f4 500 Reset handler |
5 | .bev_excpt 0xbfc00380 0x10 16 BEV-Exception |
6 | Total kseg1_boot_mem used : 0x204 516 44.2% of 0x490 |
7 | -------------------------------------------------------------------------- |
8 | Total Program Memory used : 0xc004 49156 35.4% of 0x21e00 |
9 | -------------------------------------------------------------------------- |
10 | |
11 | |
12 | kseg1 Data-Memory Usage |
13 | section address length [bytes] (dec) Description |
14 | ------- ---------- ------------------------- ----------- |
15 | .eh_frame 0xa0000000 0x20 32 |
16 | .persist 0xa0000020 0x8 8 |
17 | .sdata 0xa0000028 0x14 20 Small init data |
18 | .sbss 0xa000003c 0xe8 232 Small uninit data |
19 | .bss 0xa0000124 0x158 344 Uninitialized data |
20 | .bss 0xa000027c 0x3c60 15456 Uninitialized data |
21 | Total kseg1_data_mem used : 0x3edc 16092 49.1% of 0x8000 |
22 | -------------------------------------------------------------------------- |
23 | Total Data Memory used : 0x3edc 16092 49.1% of 0x8000 |
24 | -------------------------------------------------------------------------- |
25 | |
26 | |
27 | Dynamic Data-Memory Reservation |
28 | section address length [bytes] (dec) Description |
29 | ------- ---------- ------------------------- ----------- |
30 | heap 0xa0003ee0 0x40 64 Reserved for heap |
31 | stack 0xa0003f38 0x40b8 16568 Reserved for stack |
32 | |
33 | -------------------------------------------------------------------------- |
Man beachte wieviel er hier belegt: .bss 0xa000027c 0x3c60 15456 Uninitialized data
Was ich hier einfach nicht verstehe warum der TCP Stack in einen kleinen PIC18F97J60 passt, und ein bei einem großen PIC32 auf einmal nicht mehr. Ich kann irgendwie auch nur die ersten 50% belegen, danach nicht mehr, irgendwie verwendet er nur den "near" Speicher. Beim 16 Bit compiler konnte man noch das Speicher Model ändern, nur das kann man beim XC32 nicht mehr. Gerade der PIC32MX664 wäre doch komplett nutzlos wenn nichtmal der TCP Stack rein passt. Geschweige den von der USB Lib
Also ich bin ein Tick weiter, scheinbar kann man die Vitrual Memory Map Umstellen das mehr near speicher zur Verfügung steht. Es muss doch da irgend wer eine Idee haben.
David Mueller schrieb: > mehr near speicher zur Verfügung steht. Gibt es das Konzept "near" bei einer MIPS-Architektur überhaupt? MfG Klaus
Servus David, benutzt Du die aktuellste IDE mit aktuellstem Compiler? Vielleicht hilft es, die Heap-Size zu verkleinern, so dass mehr RAM übrig bleibt (bei mir reichen 1024) Sonst würde ich mal die Optionen "Remove unused sections" und "Allow overlapped sections" ausprobieren. Evtl. schaust Du mal in das Linker File unter C:\Program Files\Microchip\xc32\v1.21\pic32mx\lib\proc\32MX664F128H\procdefs.ld oder erstellst eine Kopie und gibts das unter "Linker Files" an. Bei kseg1_data_mem sollte 0x8000 stehen (also 32k RAM).. Sonst fällt mir vorerst auch nichts mehr ein.. Viele Grüße Florian
anyway: Mein RAM ist mit TCP/IP Stack, USB und ein bisschen Drumherum bei 0x7FBC, also in Deinem Fall wäre das schon am Anschlag.. Das Map-File wird wohl erst nach erfolgreichem Linken generiert, dafür brauche ich zumindest keine Extra-Option.
Flo schrieb: > Bei kseg1_data_mem sollte 0x8000 stehen (also 32k RAM).. ja Das steht da, hab auch schon versucht die procdefs.ld zu kopieren und darin rum zu spielen aber ohne Erfolg. > Vielleicht hilft es, die Heap-Size zu verkleinern, so dass mehr RAM > übrig bleibt (bei mir reichen 1024) Ich habe bei Heap nur 64 in den Einstellungen in MPLABX eingetragen. Das kann doch nicht sein das ich erst den TCP Buffer verkleinern muss damit das funktioniert und compiled. TCPIPConfig.h...
1 | // #define TCP_PIC_RAM_SIZE (16384ul)
|
2 | #define TCP_PIC_RAM_SIZE (2048ul)
|
nur noch 2kb Buffer für nen PIC32? Da wären doch die PIC32MX664 viel zu klein um da jemals TCP und USB gemeinsam nutzen zu können, aber für irgendwas müssen die dinger doch verkauft werden ?? Ich habe gesehen das es ein Virtuellen speicher gibt den man sich umgestalten kann, z.B. mit BMX..... Register. Aber kann das echt sein das ich da erst so ein Aufwand treiben muss um einfach nur TCP da rein zu bekommen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.