PIC: cc5x mit zwei modulen

Gast #494866
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren