Forum: Mikrocontroller und Digitale Elektronik [PIC] Hitech-C findet spi.h nicht


von Joachim .. (joachim_01)


Lesenswert?

Hallo,
ich probiere gerade einen (für mich neuen) Compiler aus. Wenn ich spi.h 
einbinden möchte, wir diese nicht gefunden. In der Doku fand ich:
 <htc.h> will automatically include peripheral library header files when 
--ru

1) Stimmt der Syntax? Der Buchstabe 'u' hört direkt am rechten Rand des 
pdf-files aus... könnte da noch was nachkommen?

2) Wo kann ich die Option setzten? Oder ist sie nicht schon per default 
gesetzt? Beim C18 finde ich jede Menge gesetzte Compiler-Schalter unter 
Projects -> build options -> projects -> Reg.karte Compiler, bei Hitech 
keinen einzigen.





#include <htc.h>
#include <spi.h>

__CONFIG(1, FCMDIS & IESODIS & HS);
__CONFIG(2, BORDIS & BORV45 & PWRTEN & WDTDIS & WDTPS1);
__CONFIG(3, CCP2RB3 & LPT1DIS & 0xFDFF);
__CONFIG(4, DEBUGDIS & XINSTDIS & LVPDIS & STVRDIS);
__CONFIG(5, 0xFFFF);
__CONFIG(6, 0xFFFF);
__CONFIG(7, 0xFFFF);
void init(void)
{
// port directions: 1=input, 0=output

PORTC  = 0b00000000;  //clear output data latch
TRISC  = 0b00000000;

}



//wait
void wait(unsigned int a) {
  unsigned int i,j;
    for (i = 0; i < a ; i++) {
       for (j = 1 ; j < 1000; j++);
      }
}





void main(void)
{
int a, iValue1, iValue2;

/***************************************************************
* 20.07.2011
* spi 74HC595 shift register test
*
* Lines:
* clk: RB1
* Ser in: RC7
* /G (output enable): RC6 (mußt be low)
* storage register: RC2
*
**************************************************************/

  init();
  PORTC &= 0b10111111; //RC6 = 0 (/G)
  OpenSPI(SPI_FOSC_16, MODE_00, SMPEND);
  iValue1 = 1;
  iValue2 = 1;
  WriteSPI(iValue1);
  WriteSPI(iValue2);
  PORTC |= 0b00000100; //RC2 = 1 clock data in storage

}



ergibt:

Build C:\Test\Hi-Tech\Test1\Test_name for device 18F4550
Using driver C:\Program Files\HI-TECH 
Software\PICC-18\PRO\9.66\bin\picc18.exe

Make: The target "C:\Test\Hi-Tech\Test1\main.p1" is out of date.
Executing: "C:\Program Files\HI-TECH 
Software\PICC-18\PRO\9.66\bin\picc18.exe" --pass1 
C:\Test\Hi-Tech\Test1\main.c -q --chip=18F4550 "-IC:\Program 
Files\HI-TECH Software\PICC-18\PRO\9.66\include\peripheral" 
"-IC:\Program Files\HI-TECH Software\PICC-18\PRO\9.66\include" -P 
--runtime=default,+clear,+init,-keep,-download,+stackwarn,-config,+clib, 
-plib  --opt=default,+asm,-speed,+space,9 --warn=0 -Blarge --double=24 
--cp=16 -D--runtime=plib -g --asmlist "--errformat=Error   [%n] %f; 
%l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; 
%l.%c %s"
Executing: "C:\Program Files\HI-TECH 
Software\PICC-18\PRO\9.66\bin\picc18.exe" -oTest_name.cof 
-mTest_name.map --summary=default,-psect,-class,+mem,-hex 
--output=default,-inhx032 main.p1 --chip=18F4550 "-IC:\Program 
Files\HI-TECH Software\PICC-18\PRO\9.66\include\peripheral" 
"-IC:\Program Files\HI-TECH Software\PICC-18\PRO\9.66\include" -P 
--runtime=default,+clear,+init,-keep,-download,+stackwarn,-config,+clib, 
-plib  --opt=default,+asm,-speed,+space,9 --warn=0 -Blarge --double=24 
--cp=16 -D--runtime=plib -g --asmlist "--errformat=Error   [%n] %f; 
%l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; 
%l.%c %s"
HI-TECH C PRO for the PIC18 MCU Family  V9.66
Copyright (C) 1984-2011 HI-TECH SOFTWARE
licensed for evaluation purposes only
this licence will expire on Fri, 02 Sep 2011
Advisory[1233] Employing 18F4550 errata work-arounds:
Advisory[1234]  * Corrupted fast interrupt shadow registers
Error   [500] ; 0. undefined symbols:
  _OpenSPI(Test_name.obj) _WriteSPI(Test_name.obj)





.

von Karl H. (kbuchegg)


Lesenswert?

Joachim ... schrieb:

> #include <htc.h>
> #include <spi.h>


gibt es die Datei überhaupt?

Hast du die compilerspezifischen Include Directories durchsucht, ob sich 
dort eine derartige Datei findet? Die müsste auf dem gleichen 
Verzeichnis sein, wie die htc.h. Eventuell ist sie ja auch auf einem 
Subverzeichnis und die Doku ist falsch.

von Karl H. (kbuchegg)


Lesenswert?

Moment mal

Error   [500] ; 0. undefined symbols:
  _OpenSPI(Test_name.obj) _WriteSPI(Test_name.obj)


das ist eine traditionelle Fehlermeldung des Linkers und nicht des 
Compilers. D.h. das Header File ist völlig in Ordnung, aber der Linker 
konnte die entsprechenden Funktionen nicht finden. Da wirst du wohl noch 
irgendeine Library beim Linken mit angeben müssen.

von Joachim .. (joachim_01)


Lesenswert?

@Karl Heinz Buchegger
Yep hast recht, jetzt seh ich's auch ;-)

Aber ich glaub ich hab's gefunden.
Die Lösung für den nächsten der über das Problem stolpert:

Projects -> build options -> projects -> Reg.karte Compiler "Link in C 
library" ist angehakt. Statttdessen muß "Link in peripheral library" 
angehakt sein.

Möglicherweise sind die peripheral libs von Microchip und nicht vom 
Compiler-Hersteller selbst... vielleicht muß Hitech da einen Trennstrich 
ziehen...

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.