main
Simon 4 months ago
parent c1145d28f8
commit b422ee176a

@ -32,4 +32,5 @@ context_launch:
align 16 align 16
fake_systemv_abi: fake_systemv_abi:
mov rdi, r15 mov rdi, r15
mov rsi, r14
ret ret

@ -34,6 +34,11 @@ Ticketlock koutlock;
//}; //};
Context test2;
uint8_t test2_stack[256];
Application application2 = Application(test2_stack);
TextStream dout[Core::MAX] = { TextStream dout[Core::MAX] = {
{0, 40, 10, 14}, {0, 40, 10, 14},
@ -126,9 +131,8 @@ extern "C" int main() {
PS2Controller::drainBuffer(); PS2Controller::drainBuffer();
DBG << "Main CPU " << static_cast<int>(LAPIC::getID()) << endl << flush; DBG << "Main CPU " << static_cast<int>(LAPIC::getID()) << endl << flush;
prepareContext(&test1_stack[sizeof(test1_stack)-1], test1, (void(*)(void*)) &(Application::kickoff),(Thread*)&application);
prepareContext(&test1_stack[sizeof(test1_stack)-1], test1, (void(*)(void*)) &(test_func1)); prepareContext(&test2_stack[sizeof(test2_stack)-1], test2, (void(*)(void*)) &(Application::kickoff),(Thread*)&application2);
prepareContext(&test2_stack[sizeof(test2_stack)-1], test2, (void(*)(void*)) &(test_func2));
context_launch(&test1); context_launch(&test1);

@ -8,6 +8,7 @@
#include "../../arch/core.h" #include "../../arch/core.h"
#include "../../interrupt/guard.h" #include "../../interrupt/guard.h"
#include "../../debug/output.h" #include "../../debug/output.h"
#include "../../arch/context.h"
char text[] = "Ich mag\n\ char text[] = "Ich mag\n\
Saftige Pflaumen voller Aroma\n\ Saftige Pflaumen voller Aroma\n\
Ich knuddel jede Oma ins Koma\n\ Ich knuddel jede Oma ins Koma\n\
@ -22,7 +23,8 @@ Und wacht sie aus'm Koma auf, kriegt sie von mir 'n Sticker\n\
\n"; \n";
extern Ticketlock koutlock; extern Ticketlock koutlock;
extern Context* test2; extern Context* test1;
extern uint8_t test1_stack[], test2_stack[];
void activeWaitDelay(uint64_t cycles) { void activeWaitDelay(uint64_t cycles) {
uint64_t counter = 0; // Use volatile to prevent optimization uint64_t counter = 0; // Use volatile to prevent optimization
for (uint64_t i = 0; i < cycles; ++i) { for (uint64_t i = 0; i < cycles; ++i) {
@ -37,6 +39,7 @@ void Application::action() { // NOLINT
while (1) { while (1) {
//koutlock.lock(); //koutlock.lock();
{ {
<<<<<<< HEAD
Guarded g = Guard::enter(); Guarded g = Guard::enter();
//g.vault(); //g.vault();
g.vault().kout.setPos((unsigned)0,(unsigned)Core::getID()*2+1); g.vault().kout.setPos((unsigned)0,(unsigned)Core::getID()*2+1);
@ -46,11 +49,22 @@ void Application::action() { // NOLINT
//g.vault().kout << endl << flush; //g.vault().kout << endl << flush;
//Guard::leave(); //Guard::leave();
//koutlock.unlock(); //koutlock.unlock();
=======
Guarded g = Guard::enter();
//g.vault();
g.vault().kout.setPos((unsigned)0,(unsigned)Core::getID()*2+1);
g.vault().kout << test1<< flush;
//g.vault().kout << endl << flush;
//Guard::leave();
//koutlock.unlock();
>>>>>>> a0bac7f (foooo)
} }
Core::pause(); Core::pause();
//activeWaitDelay(1000000000); activeWaitDelay(10000000);
if(cnt >= sizeof(text)-1) if(cnt >= sizeof(text)-1)
cnt=0; cnt=0;
context_switch(test2,test1);
} }
} }

Loading…
Cancel
Save