Forum: Mikrocontroller und Digitale Elektronik PIC: cc5x mit zwei modulen


von inschenjoer (Gast)


Lesenswert?

Hallo,

ich versuche gerade die 1K-Grenze bei dem angegebenen Compiler zu 
umgehen. Ich habe ein Programm, dass eine Nachricht über die serielle 
Schnittstelle an den PC sendet. In einem Modul funktioniert es. Wenn ich 
jedoch eine Funktion in ein anderes Modul auslagere, kommt am PC nichts 
an. Vor dem senden soll die eine Pause-Funktion von 4 Sekunden 
aufgerufen werden, die in einem anderen Modul liegt:

void delay100(bank1 char t)
{
  uns16 ms;

  uns8 i;
  for (i = 0; i < 100; i++)
  {
    ms = 5*t;             // Die Funktion ist für 4MHz Takt gedacht. Bei 
20MHz muss
                          // die Pause mit einem Faktor von 5 
multipliziert werden

    while(ms)        // Schleife verlassen, wenn ms=0 ist
    {
      OPTION = 2;      // Vorteiler auf 8 einstellen
    TMR0 = 131;      // 125 * 8 = 1000 (= 1 ms)
    while (TMR0);        // Abwarten einer Millisekunde
      ms--;        // "ms" mit jeder Millisekunde erniedrigen
    }
  }
}

Die gemeinsame include-Datei sieht wie folgt aus:

// delay.c
extern page0 void delay100(char t);

Das Linker script:

// Sample linker command file for 16F873
// $Id: 16f873.lkr,v 1.5.16.1 2005/11/30 15:15:29 curtiss Exp $

LIBPATH  .

CODEPAGE   NAME=vectors  START=0x0      END=0x3      PROTECTED
//CODEPAGE   NAME=page0    START=0x4      END=0x7FF
INCLUDE  main.lkr   // change to right module/script file name
CODEPAGE   NAME=page1    START=0x800    END=0xFFF
CODEPAGE   NAME=.idlocs  START=0x2000   END=0x2003   PROTECTED
CODEPAGE   NAME=.config  START=0x2007   END=0x2007   PROTECTED
CODEPAGE   NAME=eedata   START=0x2100   END=0x217F   PROTECTED

DATABANK   NAME=sfr0     START=0x0      END=0x1F     PROTECTED
DATABANK   NAME=sfr1     START=0x80     END=0x9F     PROTECTED
DATABANK   NAME=sfr2     START=0x100    END=0x10F    PROTECTED
DATABANK   NAME=sfr3     START=0x180    END=0x18F    PROTECTED

SHAREBANK   NAME=gpr0     START=0x20     END=0x7F
SHAREBANK   NAME=gpr0     START=0x120    END=0x17F

SHAREBANK   NAME=gpr1     START=0xA0     END=0xFF
SHAREBANK   NAME=gpr1     START=0x1A0    END=0x1FF

SECTION    NAME=STARTUP  ROM=vectors    // Reset and interrupt vectors
SECTION    NAME=ISERVER  ROM=intserv   // Interrupt routine
SECTION    NAME=PROG1    ROM=page0      // ROM code space - page0
SECTION    NAME=PROG2    ROM=page1      // ROM code space - page1
SECTION    NAME=IDLOCS   ROM=.idlocs    // ID locations
SECTION    NAME=DEEPROM  ROM=eedata     // Data EEPROM

SECTION    NAME=BANK0    RAM=sfr0  // RAM bank 0
SECTION    NAME=BANK1    RAM=sfr1  // RAM bank 1
SECTION    NAME=BANK2    RAM=sfr2  // RAM bank 1
SECTION    NAME=BANK3    RAM=sfr3  // RAM bank 1


Also irgendwie scheint der PIC bei dieser Funktion hängen zu bleiben. 
Beim compilieren bekomme ich auch mehrmals folgende Fehlermeldung:

Register in operand not in bank 0.  Ensure that bank bits are correct.

Damit kann ich aber nichts anfangen.

mfg
Sebastian

von Hans-Ulrich R. (Gast)


Lesenswert?


von inschenjoer (Gast)


Lesenswert?

Der Link ist mir bekannt und genauso habe ich es ja auch probiert. Aber 
irgendwie scheint das bei mir nicht klappen zu wollen.

von Stefan B. (Gast)


Lesenswert?

Vielleicht helfen Dir die folgenden Beiträge

Beitrag "PIC 16F877 EEPROM  / CC5X"
Beitrag "cc5x und PIC 16F628 / 88 problem"

Oder meine Erkenntnisse auf meiner Homepage

http://www.stefan-buchgeher.info/elektronik/cc5x/cc5x.html


Stefan B.
(Linz, Österreich)

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
Noch kein Account? Hier anmelden.