Hmm. Also im Header habe ich den task als "void task_SRF02(void)" benannt. Und "SRF02_Dist" als externe uint16_t. Das heißt doch, dass wenn ich den Task in meiner Hauptschleife immer wieder aufrufe, dass dann die Variable SRF02_Dist stets neu beschrieben wird und auch in meinen anderen Funktionen verfügbar ist, ich brauche also keinen Rückgabewert im Tast (kein return ...). Und ich muss den Wert auch nicht mehr extra zuweisen, den sollte ja die Variable SRF02_Dist schon haben. Ich kann also einfach schreiben:
Code:
I2CTWI_readRegisters[I2C_RF02_DIST_LOW] = (SRF02_Dist & 0x00ff);
I2CTWI_readRegisters[I2C_RF02_DIST_HIGH] = (SRF02_Dist & 0xff00) >> 8;
Jedoch klappt das dann nicht, ich bekomme wieder Fehler:
Code:
avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6M32_I2CSlave.o -I../../Library -I../../Library/RP6control -I../../Library/RP6common -std=gnu99 -MD -MP -MF .dep/RP6M32_I2CSlave.elf.d RP6M32_I2CSlave.o ../../Library/RP6control/RP6ControlLib.o ../../Library/RP6common/RP6uart.o ../../Library/RP6common/RP6I2CslaveTWI.o ../../Library/RP6control/RP6ControlServoLib.o ../../Library/RP6common/RP6RemotrolCommon.o --output RP6M32_I2CSlave.elf -Wl,-Map=RP6M32_I2CSlave.map,--cref -lm
RP6M32_I2CSlave.o: In function `task_updateRegisters':
C:\Users\Fabian\Dropbox\BA_Robotik\Firmware\M128 - Master\M32 - Slave/RP6M32_I2CSlave.c:104: undefined reference to `SRF02_Dist'
C:\Users\Fabian\Dropbox\BA_Robotik\Firmware\M128 - Master\M32 - Slave/RP6M32_I2CSlave.c:104: undefined reference to `SRF02_Dist'
RP6M32_I2CSlave.o: In function `main':
C:\Users\Fabian\Dropbox\BA_Robotik\Firmware\M128 - Master\M32 - Slave/RP6M32_I2CSlave.c:275: undefined reference to `task_SRF02'
make: *** [RP6M32_I2CSlave.elf] Error 1
Lesezeichen