1

change thread switch args

This commit is contained in:
2022-07-23 18:27:25 +02:00
parent 9a3458e56a
commit 55fdf2d493
2 changed files with 9 additions and 5 deletions

View File

@ -27,7 +27,10 @@
// entsprechen. // entsprechen.
extern "C" { extern "C" {
void Thread_start(unsigned int esp); void Thread_start(unsigned int esp);
void Thread_switch(unsigned int esp_now, unsigned int esp_then);
// NOTE: Only when backing up the previous thread the esp get's updated,
// so only esp_pre is a pointer
void Thread_switch(unsigned int* esp_prev, unsigned int esp_next);
} }
unsigned int ThreadCnt = 1; // Skip tid 0 as the scheduler indicates no preemption with 0 unsigned int ThreadCnt = 1; // Skip tid 0 as the scheduler indicates no preemption with 0
@ -42,7 +45,7 @@ void Thread_init(unsigned int* esp, unsigned int* stack, void (*kickoff)(Thread*
// NOTE: c++17 doesn't allow register // NOTE: c++17 doesn't allow register
// register unsigned int** sp = (unsigned int**)stack; // register unsigned int** sp = (unsigned int**)stack;
unsigned int** sp = (unsigned int**)stack; // unsigned int** sp = (unsigned int**)stack;
// Stack initialisieren. Es soll so aussehen, als waere soeben die // Stack initialisieren. Es soll so aussehen, als waere soeben die
// eine Funktion aufgerufen worden, die als Parameter den Zeiger // eine Funktion aufgerufen worden, die als Parameter den Zeiger
@ -149,11 +152,12 @@ Thread::Thread(char* name) : stack(new unsigned int[1024]), esp(0), log(name), n
*---------------------------------------------------------------------------* *---------------------------------------------------------------------------*
* Beschreibung: Auf die nächste Koroutine umschalten. * * Beschreibung: Auf die nächste Koroutine umschalten. *
*****************************************************************************/ *****************************************************************************/
void Thread::switchTo(Thread& next) const { void Thread::switchTo(Thread& next) {
/* hier muss Code eingefügt werden */ /* hier muss Code eingefügt werden */
Thread_switch(this->esp, next.esp); // log.trace() << name << ":: Has esp " << hex << esp << endl;
Thread_switch(&esp, next.esp);
} }
/***************************************************************************** /*****************************************************************************

View File

@ -57,7 +57,7 @@ public:
void start() const; void start() const;
// Umschalten auf Thread 'next' // Umschalten auf Thread 'next'
void switchTo(Thread& next) const; void switchTo(Thread& next);
// Ask thread to terminate itself // Ask thread to terminate itself
void suicide() { running = false; } void suicide() { running = false; }