change thread switch args
This commit is contained in:
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|||||||
@ -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; }
|
||||||
|
|||||||
Reference in New Issue
Block a user