www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Banking probleme mit PIC 16f690


Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sourcecode (bitte auf's Minimum reduzieren)?
besser noch Projekt posten (gezippt).
Genaue Compiler-Version?

Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sourcecode (bitte auf's Minimum reduzieren)?
besser noch Projekt posten (gezippt).
Genaue Compiler-Version?

Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
HI-TECH PICC-Lite COMPILER (Microchip PICmicro)  V9.60PL1
Copyright (C) 1984-2007 HI-TECH SOFTWARE
Memory Summary:
...

Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?
HI-TECH PICC-Lite COMPILER (Microchip PICmicro)  V9.60PL1
                                                 ^^^^^^^^

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?

Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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%)

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vor den Variablen das prefix BANK1 setzen, sollte passen.

Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so meinen sie: zb  BANK1 array[20];

Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bank1 UINT8 array[20]; // es ist ein Prefix, heißt VOR der Declaration

Autor: theotigane (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: schris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Timo P (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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??

Autor: Timo P (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.