ok. eine grundstruktur einer funktion sieht so aus:

[RÜCKGABETYP] [NAME]([EINGABETYP1] [EINGABENAME1], [EINGABETYP2] [EINGABENAME2], ...){
Programmcode;
return [RÜCKGABENAME];
}

Rückgabetyp: wenn ein wert zurückgegeben werden soll, zB so wie bei pollswitch, musst du hier hinschreiben von welchem typ die rückgabe ist. also zB char, int oder so. wenn kein wert zurückgegeben werden soll, zB wie bei OdometrieData, dann steht hier "void".

Name: hier steht, wie die funktion heissen soll. mit diesem namen kannst du die funktion dann im hauptprogramm aufrufen. zB: Odometrie (wird dann später durch Odometrei(...) aufgerufen)

EingabetypX: wenn du der funktion werte übergeben willst, dann musst du hier hinschreiben was das für werte sind. zB char, int...
EingabenameX: hier schreibst du hin, wie die werte innerhalb der funktion heissen sollen.
wenn du keine werte übergeben willst, dann kommt zwischen die klammern nur das wort "void". beispiel: PollSwitch(void) wird aufgerufen mit PollSwitch();
MotorSpeed(unsigned char speedleft, unsigned char speedright) wird zB aufgerufen mit MotorSpeed(255,255).

Dann kommt zwischen zwei geschweifte klammern {} der programmcode, hier wird gesagt was die funktion tun soll.

Rückgabename: mit return wird ein wert zurückgegeben, dessen name steht hier. wenn nichts zurückgegeben wird, kannst du bei einigen compilern die zeile weglassen. besser ist es jedoch, hier nur "return;" hinzuschreiben.

ein beispiel:

Code:
#include "asuro.h"

int addieren(int erstezahl, int zweitezahl){
  int summe;
  summe = erstezahl + zweitezahl;
  return summe;
}

void saghallo(void){
  SerWrite("Hallo",5);
  return;
}

///////////////hier beginnt das hauptprogramm:
int main(void){

  int meinezahl1;
  int meinezahl2;
  int meinesumme;

  Init();

  meinezahl1 = 123;
  meinezahl2 = 456;
  meinesumme = addieren(meinezahl1, meinezahl2);

  saghallo();

  while(1);
  return 0;
}
es werden zwei zahlen festgelegt, mithilfe der eben definierten funtion addiert, und dann wird hallo im terminal ausgegeben.