Re: <INTEGRITY RTOS> Error "ObjectTableIsFull" while CreateProtectedTask()
- From: "Alex Vinokur" <alexvn@xxxxxxxxxxxxxxxxxxxxx>
- Date: 27 Feb 2006 05:32:53 -0800
Here is a new experiment.
A program below
* works fine with STACK_SIZE=0x2000
* produces Error-44 (NoPagesOnFreeList)
* produces Error-3 (ObjectTableIsFull)
How should we manage memory resources in order to get programs working
fine?
------ foo.cc ------
#include <INTEGRITY.h>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <util/error_string.h>
using namespace std;
#define STACK_SIZE 0x2000 // OK
// #define STACK_SIZE 0x5000 // IntegrityError = 44: NoPagesOnFreeList
// #define STACK_SIZE 0x7000 // IntegrityError = 3: ObjectTableIsFull
static Semaphore sem;
struct Data
{
char* m_pValue;
int m_iValue;
Data(char * i_pValue = 0, int i_iValue = 0)
:
m_pValue (i_pValue),
m_iValue (i_iValue)
{}
};
void CheckError(Error i_Error)
{
if (i_Error == Success) return;
cerr << "IntegrityError = " << i_Error << ": " <<
ErrorString(i_Error) << endl;
HaltTask(CurrentTask());
}
void task(void)
{
ReleaseSemaphore(sem);
Exit(0);
}
#define NUMBER_OF_TASKS 3
int main(void)
{
Task children[NUMBER_OF_TASKS];
char taskName[NUMBER_OF_TASKS][25];
for (size_t i = 0; i < NUMBER_OF_TASKS; i++)
{
sprintf (taskName[i], "child-%d", i);
}
CheckError (CreateSemaphore(0, &sem));
cerr << "CreateSemaphore() performed" << endl;
// --- Spawn the children ---
vector<Data> taskData (NUMBER_OF_TASKS);
for (size_t i = 0; i < NUMBER_OF_TASKS; i++)
{
CheckError (CreateProtectedTask(1, (Address)task, STACK_SIZE,
taskName[i], &children[i]));
cerr << taskName[i] << ": CreateProtectedTask() performed" << endl;
CheckError (SetTaskIdentification(children[i],
(Address)&taskData[i]));
cerr << taskName[i] << ": SetTaskIdentification() performed" << endl;
CheckError (RunTask(children[i]));
cerr << taskName[i] << ": RunTask() performed" << endl;
}
// ------------------------
for (size_t i = 0; i < NUMBER_OF_TASKS; i++)
{
CheckError (WaitForSemaphore(sem));
cerr << taskName[i] << ": WaitForSemaphore() performed" << endl;
}
// ------------------------
for (size_t i = 0; i < NUMBER_OF_TASKS; i++)
{
CheckError (CloseProtectedTask(children[i]));
cerr << taskName[i] << ": CloseProtectedTask() performed" << endl;
}
exit (0);
}
--------------------
--- Output for STACK_SIZE=0x2000 ---
CreateSemaphore() performed
child-0: CreateProtectedTask() performed
child-0: SetTaskIdentification() performed
child-0: RunTask() performed
child-1: CreateProtectedTask() performed
child-1: SetTaskIdentification() performed
child-1: RunTask() performed
child-2: CreateProtectedTask() performed
child-2: SetTaskIdentification() performed
child-2: RunTask() performed
child-0: WaitForSemaphore() performed
child-1: WaitForSemaphore() performed
child-2: WaitForSemaphore() performed
child-0: CloseProtectedTask() performed
child-1: CloseProtectedTask() performed
child-2: CloseProtectedTask() performed
------------------------------------
--- Output for STACK_SIZE=0x5000 ---
CreateSemaphore() performed
child-0: CreateProtectedTask() performed
child-0: SetTaskIdentification() performed
child-0: RunTask() performed
child-1: CreateProtectedTask() performed
child-1: SetTaskIdentification() performed
child-1: RunTask() performed
IntegrityError = 44: NoPagesOnFreeList
------------------------------------
--- Output for STACK_SIZE=0x7000 ---
CreateSemaphore() performed
child-0: CreateProtectedTask() performed
child-0: SetTaskIdentification() performed
child-0: RunTask() performed
IntegrityError = 3: ObjectTableIsFull
------------------------------------
---
Alex Vinokur
email: alex DOT vinokur AT gmail DOT com
http://mathforum.org/library/view/10978.html
http://sourceforge.net/users/alexvn
.
- Follow-Ups:
- Re: <INTEGRITY RTOS> Error "ObjectTableIsFull" while CreateProtectedTask()
- From: Alex Vinokur
- Re: <INTEGRITY RTOS> Error "ObjectTableIsFull" while CreateProtectedTask()
- References:
- <INTEGRITY RTOS> Error "ObjectTableIsFull" while CreateProtectedTask()
- From: Alex Vinokur
- <INTEGRITY RTOS> Error "ObjectTableIsFull" while CreateProtectedTask()
- Prev by Date: why does the lcd display so lag.
- Next by Date: Re: why does the lcd display so lag.
- Previous by thread: <INTEGRITY RTOS> Error "ObjectTableIsFull" while CreateProtectedTask()
- Next by thread: Re: <INTEGRITY RTOS> Error "ObjectTableIsFull" while CreateProtectedTask()
- Index(es):