ich hab folgendes problem: der Speicherplatz der PIC 18F690 ist sehr klein. wenn ich aber ein paar größere arrays definiere, bekomm ich sofort eine fehlermeldung, dass mit irgendwelchen 'section' was nicht stimmt. jetzt hab ich im datenblatt etwas übers 'banking' gefunden, kann aber damit absolut nichts anfangen. hat jemand von euch vielleicht auch schon mal dieses problem gehabt? wie kann ich den speicher als ganzes benutzen und nicht in Banken unterteilt? Data space: BANK0 used 5Ch ( 92) of 60h bytes ( 95.8%) BANK1 used 0h ( 0) of 50h bytes ( 0.0%) COMBANK used 1h ( 1) of 10h bytes ( 6.3%) Der BANK1 ist ja noch frei, wie kann ich daten in BANK1 schreiben. ich benutze der HI TECH C Compiler ich bitte um eure hilfe! Danke
Sourcecode (bitte auf's Minimum reduzieren)? besser noch Projekt posten (gezippt). Genaue Compiler-Version?
wenn ich zb diese array declariert txbuffer[64]; bekomme ich diese fehlermeldung. Error [593] ; . can't find 0x1 words (0x1 withtotal) for psect "intsave" in segment "BANK0", ich vermute es gibt keinen platz mehr in Bank0 da wenn ich der array auf txbuffer[20] reduziert bekomme ich keine fehlermeldung mehr aber der BANK0 ist fast voll BANK0 used 5Ch ( 92) of 60h bytes ( 95.8%) und der Bank1 ist noch complete frei BANK1 used 0h ( 0) of 50h bytes ( 0.0%) gibt es eine möglichkeit daten in Bank1 zu plazieren in c? ich benutze HI-TECH Software Version 9.60
Sourcecode (bitte auf's Minimum reduzieren)? besser noch Projekt posten (gezippt). Genaue Compiler-Version?
Compiler version: HI-TECH C Compiler Version 9.60 code #ifndef MAIN_C #define MAIN_C #include "headerfiles.h" //---------------------------------------------------------------------- --- // Defines #define _CONFIG *(UINT16 *) 0x2007 // Force Config to 0x2007 #define mode RX //---------------------------------------------------------------------- --- //---------------------------------------------------------------------- --- // Global Variables BYTE txBuffer[100]; BYTE rxBuffer[64]; //---------------------------------------------------------------------- --- //---------------------------------------------------------------------- --- // void main(void) // // DESCRIPTION: // //---------------------------------------------------------------------- --- void main (void) { UINT8 length = 0; UINT8 x = 0x11; UINT8 i; #ifdef FREQ_433_CC1101 // PATABLE (0 dBm output power) patable[0] = 0xC0; patableLen = 1; #endif Setup(FRQ_CLK1);// Init clock 8MHz setup_wdt( );//Init WDT 4seconde // Set up the crossbar and I/O ports to communicate with cc1101 IO_INIT(); Reset_CC1100(); writeRFSettings(); halSpiWriteReg(CCxxx0_PATABLE, patable[0]);//R output power // Infinite loop while (TRUE) { switch (mode) { case TX: /* Infinite loop* / while (TRUE) { halRfSendPacket(txBuffer, sizeof(txBuffer)); } break; case RX: /* Infinite loop* / while (TRUE) { length = sizeof(rxBuffer); if (halRfReceivePacket(rxBuffer, &length)) { } } } #endif// main.c
Danke für den Code.
Kannst Du Dir vorstellen, dass ich diesen Code nicht compilieren kann,
weil:
> #include "headerfiles.h"
???
Funktionen aufgerufen werden, die nichts mit dem Problem zu tun haben
und die spätestens beim Linken fehlen werden.
Verwendest Du PICC, PICC-Lite, PICC-Pro, im Full- oder Lite-Mode?
Z.B. Build-Output:
1 | HI-TECH PICC-Lite COMPILER (Microchip PICmicro) V9.60PL1 |
2 | Copyright (C) 1984-2007 HI-TECH SOFTWARE |
3 | Memory Summary: |
4 | ... |
Build-Output: Using driver C:\Programme\HI-TECH Software\PICC\lite\9.60\bin\picl.exe laut daten blatt hat der 16f685 nur 255byte ram, ist diese in Bank0 und Bank1 geteilt?
theotigane wrote: > Build-Output: > Using driver C:\Programme\HI-TECH Software\PICC\lite\9.60\bin\picl.exe Jaaaah, und weiter unten, wo neben der Version auch der Patch-Level steht?
1 | HI-TECH PICC-Lite COMPILER (Microchip PICmicro) V9.60PL1 |
2 | ^^^^^^^^ |
Immerhin ist ersichtlich, dass Du die Lite-Version verwendest. Die ist meines Wissens für den PIC16F690 auf Bank 0 und 1 limitiert (=176 Bytes). > laut daten blatt hat der 16f685 nur 255byte ram, ist diese in Bank0 und > Bank1 geteilt? 256 Bytes! Schau mal im Datenblatt auf page 29 nach... dort ist die Aufteilung dargestellt. Aber Achtung: dieser PIC hat kein SSP Modul. Falls Du SPI verwendest, ... Und: Unterstützt Dein Compiler diesen PIC?
Der spi communikation wird manuel gemacht, laut output build ist der BANK1 noch complet frei Wie kann ich meine array[60] auf BANK1 plazieren. Data space: BANK0 used 5Eh ( 94) of 60h bytes ( 97.9%) BANK1 used 0h ( 0) of 50h bytes ( 0.0%)<- COMBANK used 1h ( 1) of 10h bytes ( 6.3%) Summary: Program space used 71Fh ( 1823) of 800h words ( 89.0%) Data space used 5Fh ( 95) of B0h bytes ( 54.0%)<- EEPROM space used 0h ( 0) of 100h bytes ( 0.0%) Configuration bits used 0h ( 0) of 1h word ( 0.0%) ID Location space used 0h ( 0) of 4h bytes ( 0.0%) Laut output build habe ich noch 46% frei platz Danke
Der spi communikation wird manuel gemacht, laut output build ist der BANK1 noch complet frei Wie kann ich meine array[60] auf BANK1 plazieren. Data space: BANK0 used 5Eh ( 94) of 60h bytes ( 97.9%) BANK1 used 0h ( 0) of 50h bytes (0.0%)<-- COMBANK used 1h ( 1) of 10h bytes ( 6.3%) Summary: Program space used 71Fh ( 1823) of 800h words ( 89.0%) Data space used 5Fh ( 95) of B0h bytes (54.0%)<-- EEPROM space used 0h ( 0) of 100h bytes ( 0.0%) Configuration bits used 0h ( 0) of 1h word ( 0.0%) ID Location space used 0h ( 0) of 4h bytes ( 0.0%) Laut output build habe ich noch 46% frei platz Danke
Wie kann ich mit HI-TECH PICC-Lite compiler daten in der Bank1 der pic16f690 plazieren, laut build output benutze ich ja nur 54% Ram und der BANK0 ist fast voll. Data space: BANK0 used 5Eh ( 94) of 60h bytes ( 97.9%) BANK1 used 0h ( 0) of 50h bytes (0.0%)<-- COMBANK used 1h ( 1) of 10h bytes ( 6.3%) Summary: Program space used 71Fh ( 1823) of 800h words ( 89.0%) Data space used 5Fh ( 95) of B0h bytes (54.0%)<-- EEPROM space used 0h ( 0) of 100h bytes ( 0.0%) Configuration bits used 0h ( 0) of 1h word ( 0.0%) ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
UINT8 length = 0; UINT8 BANK1 array[20]; geht nicht, ich bekomme eine fehlkermeldung, Error [372] D:\WorkSpace-Mplab\FUNK\V2\main.c; 35.13 "," expected
bank1 UINT8 array[20]; // es ist ein Prefix, heißt VOR der Declaration
Warnnung nach der deklaration bank1 UINT8 array[20]; Warning [348] D:\WorkSpace-Mplab\FUNK\V2\main.c; 35.22 auto variable "array" should not be qualified und fehler nach der erste initialisierung. bank1 UINT8 array[20]; array[0]= 1; Error [491] ; . can't find 0x8 words for psect "rdata_0" in segment "BANK0" Error [593] ; . can't find 0x3 words (0x3 withtotal) for psect "intsave" in segment "BANK0" Error [593] ; . can't find 0x1 words (0x1 withtotal) for psect "intsave" in segment "BANK0" Error [593] ; . can't find 0x1 words (0x1 withtotal) for psect "intsave" in segment "BANK0" Error [593] ; . can't find 0x1 words (0x1 withtotal) for psect "intsave" in segment "BANK0" Error [477] ; . fixup overflow in expression (location 0x956 (0x94A+12), size 1, value 0xD0) Error [477] ; . fixup overflow in expression (location 0x958 (0x94A+14), size 1, value 0xD0) Error [477] ; . fixup overflow in expression (location 0x80 (0x80+0), size 1, value 0xD0) Error [477] ; . fixup overflow in expression (location 0x80 (0x80+0), size 1, value 0xD0)
pselect sind 16 bytes, welche Bankübergreifend ohne Banking vorhanden sind, und deshalb für Paramterübergabe sowie für kopieren zwischen Banks genutzt werden. Im Klartext, du musst dir ein besseres Banking überlegen.
Bitte um Hilfe! Habe auch die Fehlermeldung: Error [593] ; . es fehlen 0x1 Wörter (0x1 insgesamt) für psect "intsave" im Segment "BANK0" kurios ist, dass die Fehlermeldung nicht aus dem Grund erscheint, dass ich eine Variable anlege, sondern ausschließlich im code ergänze: if((num_of_sent_proto%140) == 0 && periodically == TRUE) low_batt(); Was sagt mir die Fehlermeldung??
Die Fehlermeldung habe ich nun so verstanden: obwohl man keine zusätzlich variable in der BANK0 anlegt, bezieht sich die Fehlermeldung dennoch auf diese. Der Grund ist wohl, dass die Bytes, die für Parameterübergaben reserviert sind, NICHT global sind, sondern für jede Speicherbank SEPARAT existieren. Wenn nun viele Funktionen bestehen, die genutzt werden, kann man weniger Variablen anlegen, als wenn man für die Parameterübergabe weniger Speicher nutzt.
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.