Ich weiß jetzt ehrlich gesagt nicht, wo's bei Dir klemmt.
Eine Funktion liefert immer irgendwas zurück. Welcher Variablentyp, wird bei der Definition festgelegt, der konkrete Wert wird dann entweder mit Return xyz übergeben, bei anderen Sprachen kann auch eine, in der Funktion lokale Variable mit exakt dem Namen der Funktion verwendet werden (in Deinem Fall "IncrementBCD").
Alle Variablen, die in der Funktion definiert werden, existieren nur dort.
Da der Funktionsaufruf nach wer's Aussage immer called bei Value ist, wird beim Aufruf für jedes übermittelte Argument 'ne neue lokale Variable erzeugt, die den übergebenen Wert erhält - eine Kopie eben.
Manipulierst Du jetzt also was an der Kopie, der lokalen Variable, verändert das nicht die Quelle, das Original.
Beim Verlassen der Funktion "verschwindet die lokale Kopie", der Speicher kann für andere Sachen verwendet werden. Außerhalb der Funktion existiert die Kopie gar nicht.
Zugreifen kannst Du auf die Funktion (genauer: auf das Funktionsergebnis bei gegebenen Argumenten), indem Du die Funktion wie eine (readOnly)Variable (eben des definierten Typs) benutzt.
Also entweder bei einer direkten (typkompatiblen) Zuweisung wie (Pseudocode):
Zielvariable=Funktionsname(Argumente)
oder bei einem Vergleich
If Variable/Wert Vergleichsoperator Funktionsname(Argumente) ...
In beiden Fällen wird in dem Moment, wo das Programm die Zuweisung/den Vergleich erreicht erstmal die Funktion mit den entsprechenden Argumenten ausgeführt, und der Returnwert dann für die Zuweisung/den Vergleich verwendet.
Was willst Du denn nun eigentlich? Wenn die Funktion keinen Wert zurückliefern soll, sondern eine global definierte Variable verändern, brauchst Du keine Funktion, sondern eine Prozedur/Subroutine (wie immer das auch unter C heißt), die keinen Rückgabetup hat. Die zu ändernde globale Variable wird dann natürlich nicht mitübergeben (da sie ja bereits ausserhalb existiert), ggf muß sie aber so definiert werden, daß die sub da Zugriff drauf hat (volatile?).
Ob diese Vorgehensweise jetzt im Sinne einer Hochsprache wäre, kann ich nicht beurteilen - bei Objektorientierten Sprachen wiederspräche es der Grundidee der Kapselung.
Aber hier gehts ja auch um Mikrocontroller...