Skip to content

Commit

Permalink
Improved Stack consumption and demos redesigning
Browse files Browse the repository at this point in the history
  • Loading branch information
solariun committed Oct 31, 2019
1 parent 02d5951 commit a837533
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 131 deletions.
17 changes: 8 additions & 9 deletions CorePartition/CorePartition.c
Original file line number Diff line number Diff line change
Expand Up @@ -250,12 +250,7 @@ static inline size_t Scheduler ()
void CorePartition_Join ()
{
if (nThreadCount == 0) return;



volatile uint8_t nValue = 0xAA;
pStartStck = (void*) &nValue;


do
{
pCurrentThread = &pThreadLight [nCurrentThread];
Expand All @@ -267,13 +262,17 @@ void CorePartition_Join ()
if (setjmp(jmpJoinPointer) == 0) switch (pCurrentThread->nStatus)
{
case THREADL_START:

pCurrentThread->nStatus = THREADL_RUNNING;

nStartedCores++;

pCurrentThread->pFunction ();

{
volatile uint8_t nValue = 0xAA;
pStartStck = (void*) &nValue;

pCurrentThread->pFunction ();
}

pCurrentThread->nStatus = THREADL_STOPPED;

Expand Down
131 changes: 15 additions & 116 deletions CorePartition/Resources/LowMemoryExample/LowMemoryExample.ino
Original file line number Diff line number Diff line change
Expand Up @@ -101,126 +101,29 @@ void Delay (uint64_t nSleep)
}



void Thread1 ()
{
unsigned long start = millis();
size_t nValue = 100;


while (1)
{
Serial.print ("\e[6;10H\e[K## Thread1: ");
Serial.print (nValue++);
Serial.print (", Sleep Time: ");
Serial.print (millis() - start);
Serial.print (", ");
Serial.print (CorePartition_GetNice ());
Serial.println ("\n");

Serial.flush();

start = millis();

CorePartition_Yield ();
}
}


float fMin = 1000, fMax = 0;


void Thread2 ()
{
unsigned long start = millis();
size_t nValue = 2340000;

while (1)
{
Serial.print ("\e[8;10H\e[K++ Thread2: ");
Serial.print (nValue++);
Serial.print (", Sleep Time: ");
Serial.print (millis() - start); start = millis();
Serial.print (", Nice: ");
Serial.print (CorePartition_GetNice());
Serial.print (", CTX: [");
Serial.print (CorePartition_GetThreadStructSize ());
Serial.print ("] bytes, Stack (used/max): [");
Serial.print (CorePartition_GetStackSize ());
Serial.print ("/");
Serial.print (CorePartition_GetMaxStackSize ());
Serial.println ("]\n");


Serial.flush();

CorePartition_Yield ();
}
}


void Thread3 ()
void Thread ()
{
unsigned long start = millis();
size_t nValue = 10000;
size_t nValue = 0;

while (1)
{
Serial.print ("\e[10;10H\e[K>> Thread3: ");
Serial.print (nValue++);
Serial.print (", Sleep Time: ");
Serial.print (millis() - start); //start = millis();
Serial.print (", Nice: ");
Serial.print (CorePartition_GetNice());
Serial.println ("\n");

Serial.flush ();

start = millis();
CorePartition_Yield ();
}
}



void Thread4 ()
{
unsigned long start = millis();
size_t nValue = 50000;

while (1)
{
Serial.print ("\e[12;10H\e[K>> Thread4: ");
Serial.print (nValue++);
Serial.print (", Sleep Time: ");
Serial.print (millis() - start); //start = millis();
Serial.print (", Nice: ");
Serial.print (CorePartition_GetNice());
Serial.println ("\n");

Serial.flush ();

start = millis();
CorePartition_Yield ();
}
}


void Thread5 ()
{
unsigned long start = millis();
size_t nValue = 30000;

while (1)
{
Serial.print ("\e[14;10H\e[K>> Thread");
Serial.print ("\e[");
Serial.print ((CorePartition_GetID()*2) + 6);
Serial.print (";10H\e[K>> Thread");
Serial.print (CorePartition_GetID()+1);
Serial.print (": ");
Serial.print (nValue++);
Serial.print (", Sleep Time: ");
Serial.print (millis() - start); //start = millis();
Serial.print (", Nice: ");
Serial.print (CorePartition_GetNice());
Serial.print (", CTX: ");
Serial.print (CorePartition_GetThreadStructSize ());
Serial.print ("b, Stack: ");
Serial.print (CorePartition_GetStackSize ());
Serial.print ("/");
Serial.print (CorePartition_GetMaxStackSize ());
Serial.println ("\n");

Serial.flush ();
Expand Down Expand Up @@ -262,20 +165,16 @@ void setup()
Serial.println ("Starting up Thread...."); Serial.flush();Serial.flush();


CorePartition_Start (5);
CorePartition_Start (3);

CorePartition_SetCurrentTimeInterface(getTimeTick);
CorePartition_SetSleepTimeInterface(sleepTick);

CreatePartition(Thread1, 40, 500);
CreatePartition(Thread, 70, 612);

CreatePartition(Thread2, 40, 1000);
CreatePartition(Thread, 70, 1000);

CreatePartition(Thread3, 40, 812);

CreatePartition(Thread4, 40, 200);

CreatePartition(Thread5, 40, 50);
CreatePartition(Thread, 70, 100);

}

Expand Down
6 changes: 3 additions & 3 deletions CorePartition/Resources/Thread/Thread.ino
Original file line number Diff line number Diff line change
Expand Up @@ -390,11 +390,11 @@ void setup()
//CorePartition_SetCurrentTimeInterface(getTimeTick);
//CorePartition_SetSleepTimeInterface(sleepTick);

CreatePartition(Thread1, 100, 0);
CreatePartition(Thread1, 80, 0);

CreatePartition(Thread2, 100, 0);
CreatePartition(Thread2, 80, 0);

CreatePartition(Thread3, 100, 0);
CreatePartition(Thread3, 80, 0);

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -523,11 +523,11 @@ void setup()
CorePartition_SetCurrentTimeInterface(getTimeTick);
CorePartition_SetSleepTimeInterface(sleepTick);

CreatePartition(Thread1, 100, 100);
CreatePartition(Thread1, 100, 50);

CreatePartition(Thread2, 100, 25);
CreatePartition(Thread2, 100, 2);

CreatePartition(Thread3, 100, 50);
CreatePartition(Thread3, 100, 4);

CreatePartition(Thread4, 100, 200);
}
Expand Down

0 comments on commit a837533

Please sign in to comment.