D
@Anon-81275 sagte in Probleme bei der Initialisierungsreihenfolge von globalen Objekten:
Und jetzt?
Wie und Jetzt. Wie es weiter geht?
Als nächsten Schritt das Wasserfall Spektrum programmieren.
@Quiche-Lorraine sagte in Probleme bei der Initialisierungsreihenfolge von globalen Objekten:
Der einzigste Punkt welcher etwas verdächtig aussieht, liegt in initialize_memory wo zuerst der Semaphore, danach der Thread und danach der Timer initialisiert wird. Ich frage mich, was passiert wenn der Thread etwas länger braucht und der Timer schon zuschlägt.
Das würde zu einen Semaphore maxCount error führen:
EEKERNEL[SignalSema] : Semaphore maxCount overflow.
SemaphoreID:31 count:4 maxCount:3
*** Unexpected reply - type=BREAKR result=EXCEPTION
*** Target program stopped. Check the location by dr command.
zudem läuft der Timer nur wenn diese Bedingung true ist
if (update_scheduled == false)
{
update_setup();
Das ist nur dann der Fall wenn man kein Audio Hardware Device benutzt weil es kein Gerät gibt was AudioStream::update_all(); triggert.
Anderweitig, wenn ein Audio gerät im globalen Konstruktor in der Main.cpp erstellt wird
wird ohne hin noch vor initialize_memory bereits
static void update_all(void)
{
if(audioSemaID == -1 )return;
//printf("DEBUG: update_all check! audioSemaID ist: %d (Adresse: %p)\n", audioSemaID, (void*)&audioSemaID);
SignalSema(audioSemaID);
}
Aufgerufen.
Das ist vermutlich beim Kopieren untergegangen:
// When an object has taken responsibility for calling update_all()
// at each block interval (approx 2.9ms), this variable is set to
// true. Objects that are capable of calling update_all(), typically
// input and output based on interrupts, must check this variable in
// their constructors.
bool AudioStream::update_setup(void)
{
if (update_scheduled) return false;
bootIOP();
update_scheduled = true;
return true;
}
@Quiche-Lorraine sagte in Probleme bei der Initialisierungsreihenfolge von globalen Objekten:
Was meinst du damit?
Ganz einfach
ich habe im nach dem if(audioSemaID == -1 ) return das printf
Wenn also audioSemaID auf z.B 31 springt müsste was Ausgegeben werden
Aber es passiert nix. aber in initialize_memory das Print kommt.
Oder aber CreateSema(&audioSema); schlägt fehl. Aber warum sollte es?
Zudem würde der debbuger was dazu ausgeben.
@Anon-81275 sagte in Probleme bei der Initialisierungsreihenfolge von globalen Objekten:
audio_update_thread
Klingt gut.