Es dreht sich um ein C-Programm für einen µC von Microchip (PIC18f8722).
und zwar habe ich durch debuggen herausgefunden, dass mein programm über spi die richtigen werte aus einem baustein einliest (dreht sich um ein ethernet controller).
dieser wert ist jeweils ein byte einer mac-addresse und muss über zwei funktionen zurückgegeben werden.
wie gesagt ich erhalte den richtigen wert allerdings wird dieser nie in meiner variable die ganz am ende steht gespeichert, in ihr wird immer der wert 0 abgespeichert.
main methode:
wichtig BYTE wurde in einer header-datei so definiert:
typedef unsigned char BYTE;
BYTE mac1 = 0, mac2 = 0, mac3 = 0, mac4 = 0, mac5 = 0, mac6 =0;
TRISDbits.TRISD7 = 0;
TRISBbits.TRISB5 = 1;
LATBbits.LATB5 = 1;
TRISD = 0x00;
TRISBbits.TRISB0 = 1;
initTimer();
LCD_init();
resetENC();
delayms(250);
setERXST(((0x5fff)-2*1518));
LATDbits.LATD0 = 1;
delayms(1000);
LATDbits.LATD0 = 0;
while (1) {
delayms(500);
LCD_Line1();
mac1 = getMac1();
LCD_hex(getMac1());
LCD_string("-");
mac2 = getMac2();
LCD_hex(mac2); //hier steht immer 0x00 drin!
LCD_string("-");
LCD_hex(getMac3());
LCD_string("-");
LCD_hex(getMac4());
LCD_string("-");
LCD_hex(getMac5());
LCD_string("-");
LCD_hex(getMac6());
}
}```
aufruf von getMacX():
```unsigned char getMac1(){
ByteOp(B3SEL);
return Byte2Op((BYTE)(RCR|0x04),0x00);
}```
aufruf von Byte2Op(){
```BYTE Byte2Op(BYTE code, BYTE data) {
BYTE answer = 0;
ENC_CS = 0;
SPI_IF = 0;
SPI_BUF = code;
WaitForSend();
answer = SPI_BUF;
SPI_BUF = data;
WaitForSend();
answer = SPI_BUF;
ENC_CS = 1;
return answer; //hier wird der richtige wert zurückgegeben!
}```
hat jemand eine idee an welcher stelle der wert verloren geht?
ich rätsel hier schon seit stunden dran rum finde aber keine lösung, da ich mir das nicht erklären kann
edit:
habe durch zwischenspeicherung ausfindig machen können das der wert beim zurückgeben der getMac()-Funktion verloren geht.
```unsigned char getMac2(){
BYTE buffer = 0;
ByteOp(B3SEL);
buffer = Byte2Op((BYTE)(RCR|0x05),0x00); //richtiger wert wird gespeichert
LCD_hex(buffer); //wert auf lcd ausgegeben
return buffer;
}```