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
Der Link ist mir bekannt und genauso habe ich es ja auch probiert. Aber irgendwie scheint das bei mir nicht klappen zu wollen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.