Moin Leute,
ich hab hier ein Problem und komm einfach nicht weiter, kann sich mal
jemand die Codeschnipsel ansehen und mir vielleicht sagen was ich da
falsch gemacht habe?!?
Build Output:
Was soll eine Funktion (oder ein Funktionsprototyp) mit konstanten
Werten anstelle von Variablen als Funktionsargumenten anfangen?
Was Du da machst enstpricht dem hier:
1
#define WERT_A 5
2
#define WERT_B 6
3
4
BYTEFunktion(BYTEWERT_A,BYTEWERT_B)
5
...
Damit kann Dein Compiler aus guten Gründen nichts anfangen.
Danke an euch Beiden,
bin gerade am rumgrübeln und lese noch etwas über "extern" und
"volatile" bei Variablen.
Ich hab also nur dem Lat und Tris einen neuen Namen gegeben und das sagt
aber nichts darüber aus ob da etwas auf 0 oder 1 gesetzt wurde.
Das mach ich ja anscheinend mit/über _chipSelectPin und
_resetPowerDownPin.
Also wäre es doch angebrachter das ich diese Werte in der Funktion
übergebe.
Also wenn ich alles so ändere dann meckert mein Linker mit mir rum, ich
hätte in der main.c und mfrc522.c Variablen doppelt definiert (multiple
definition) (hier von _chipSelectPin, _resetPowerDownPin und
uid)...darum lese ich gerade etwas in der FAQ hier im Forum, auch wenn
es für AVR ist.
Ist der Weg richtig?
Gruß
das C Tutorial lesende
Beast
Mit "volatile" und "extern" hat Dein Problem nichts zu tun.
Warum versuchst Du Deiner Funktion überhaupt etwas zu übergeben, wenn Du
doch gleichzeitig in Deiner Funktion mit Konstanten arbeitest?
1
voidMFRC522(void)
2
{
3
// Set the chipSelectPin as digital output, do not select the slave yet
4
_chipSelectPin=CS_PIN;//set _chipSelectPin to CS_Pin -> LATBbits.LATB15
5
CS_PIN_OUT=0;//Set TRISBbits.TRISB15 to output
6
_chipSelectPin=1;// LATBbits.LATB15=1
7
8
// Set the resetPowerDownPin as digital output, do not reset or power down.
9
_resetPowerDownPin=RST_PIN;//Set _resetPowerDownPin to RST_PIN -> LATBbits.LATB13
10
RST_PIN_OUT=0;//Set TRISBbits.TRISB13 to output
11
_resetPowerDownPin=0;// LATBbits.LATB13=0
12
}
Das erste void rührt daher, daß Deine Funktion gar nichts zurückgibt -
das leere return am Ende ist daher auch überflüssig.
Der Funktionsprototyp in Deiner Headerdatei sieht dann so aus:
1
voidMFRC522(void);
Vermutlich haben Deine Variablen _chipSelectPin und resetPowerDownPin
auch keinen weiteren Nutzen, so daß sich Deine Funktion reduzieren lässt
auf das hier:
1
voidMFRC522(void)
2
{
3
// Set the chipSelectPin as digital output, do not select the slave yet
4
CS_PIN_OUT=0;//Set TRISBbits.TRISB15 to output
5
CS_PIN=1;// LATBbits.LATB15=1
6
7
// Set the resetPowerDownPin as digital output, do not reset or power down.
nabend Rufus,
im Grunde benutz ich _chipSelectPin und _resetPowerDownPin später in den
anderen Funktionen wenn es um die Kommunikation mit dem MFRC522 über SPI
geht, aber du hast natürlich Recht wenn du darauf hinweist das mfrc522
als Funktion eigentlich nur die Anfangsbedingungen festlegt.
Die Library war im Grunde für den Arduino geschrieben und im
Orignialcode stand:
1
MFRC522::MFRC522(bytechipSelectPin,///< Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low)
2
byteresetPowerDownPin///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low)
3
)
Das MFRC522:: hab ich für eine Eigenart des Arduino gehalten, vielleicht
so etwas wie eine übergeordnete Instanz oder sowas.
Alle anderen Funktionen fingen auch so an, aber ohne das MFRC522::
machten die Funktionen halt genausoviel Sinn. Hab aber gesehen das die
Orignialfunktion kein Return zurückgibt, anscheinend hat Arduino das
nicht so mit dem void....
Mal abgesehen davon darf man wohl auch 2 mal PCD_WriteRegister und
PCD_ReadRegister als Funkionennamen verwenden, wobei einmal nur ein Byte
und das andere Mal mehrer Bytes geschrieben/gelesen werden.
Ich danke dir für die Ruhe die du bewahrst beim erklären ;o)
Gruß
dat
Beast
Andreas G. schrieb:> Das MFRC522:: hab ich für eine Eigenart des Arduino gehalten, vielleicht> so etwas wie eine übergeordnete Instanz oder sowas.
Wie gut das ich mich so garnicht gut auskenne.
C++: class MFRC522 -> MFRC522::MFRC522(...,...) ->
EineKlasse::eineFunktion