Upps, entschuldigt, die funktion heisst natürlich "ShiftOut()" nicht TestFunc
ich hatte sie testweise umbenannt.
Ja, das wäre okay, wenn ich die funktion nicht aufrufen würde, dürfte er diese auch entfernen.
Versuche ergaben, wenn ich dieser funktion einen parameter übergebe, dann lässt der Compiler sie auch drin, mit dem gesamten code.

so zum Beispiel:

void ShiftOut(char data)
{
while (LPC_SSP1SR.bits.BSY) ; /* wait until BSY becomes zero */
LPC_SSP1DR.value = data; /* shift out the data byte */
}

wenn aber data eine lokale variable ist und nicht übergeben wird, schmeisst der Compiler den gesamten Code raus.
Wenn ich aber auch die variable data als volatile definieren, dann gehts wieder. Er dürfte doch nichts wegoptimieren, da der Zugriff auf das
Bit "BSY" sich in einer volatile Strukture befindet. Damit muss er dieses doch erst lesen und darf keine Vorentscheidungen treffen und code wegoptimieren. Ich denke mal ich hab irgendwas falsch definiert in meiner Struktur.

Siro