Workspace usage trouble
Joel Sherrill
joel.sherrill at oarcorp.com
Fri Jan 16 12:08:00 UTC 2004
Cedric Aubert wrote:
>Hi all,
>
>I have some trouble with my workspace size. All work
>fine when I put some
>wrong number of task or semaphore or file dexcriptors
>but when I put the
>real number (with some upper number for task semaphore
>and file descriptor)
>that's don't work, it can't open allocate some task or
>other object in the
>workspace.
>
>So how can I see the available memory left in
>workspace ?
>
>
I have worked up a routine to get information and free space left in the
heap but it has not been tested.
>How can I known witch object use the workspace ?
>
>What I missed to specifie ?
>
>I take a look in the condefs but it seem to have
>nothing forgotten.
>
>
>
Given the inquiry yesterday on the list and a night's, I think I
remembered it:
/*
* reent struct allocation moved here from libc_start_hook() to avoid
* mutual exclusion problems when memory is allocated from the start hook.
*
* Memory is also now allocated from the workspace rather than the heap.
* -- ptorre 9/30/03
*/
The newlib C library reent extension was in the heap and is now in the
workspace.
That needs to be accounted for in confdefs.h on a per task basis. Try this
hack/patch and see if it helps:
$ cvs diff -u confdefs.h
Index: confdefs.h
===================================================================
RCS file: /usr1/CVS/rtems/cpukit/sapi/include/confdefs.h,v
retrieving revision 1.55.2.1
diff -u -r1.55.2.1 confdefs.h
--- confdefs.h 4 Sep 2003 18:47:20 -0000 1.55.2.1
+++ confdefs.h 16 Jan 2004 12:05:46 -0000
@@ -805,12 +805,15 @@
#define CONFIGURE_OBJECT_TABLE_STUFF \
( sizeof(Objects_Control *) + sizeof(rtems_name *) + sizeof(rtems_name) )
+#include <reent.h>
+
#define CONFIGURE_MEMORY_FOR_TASKS(_tasks) \
(((_tasks) + 1 ) * \
((sizeof(Thread_Control) + CONTEXT_FP_SIZE + \
STACK_MINIMUM_SIZE + sizeof( RTEMS_API_Control ) + \
CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API + \
CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API + \
+ sizeof(struct reent) + \
CONFIGURE_OBJECT_TABLE_STUFF)) \
)
>Thanks a lot
>
>Cedric
>
>
>/* configuration information */
>
>#include <bsp.h>
>#include <rtems.h>
>#include <stdlib.h>
>#include <stdio.h>
>#include <string.h>
>#include <Task.h>
>
>#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER // Use
>console
>
>#define CONFIGURE_RTEMS_INIT_TASKS_TABLE // Utiliser
>la table Init Task
>plus bas
>
>#define CONFIGURE_MAXIMUM_TASKS 53 // 32 SDEL
>Task and 1 RTEMS Init
>Task
>#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 10
>// Nombre de MailBox
>#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 3
>// Signal
>#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 300
> // Nombre Max de
>File Descriptor
>#define CONFIGURE_MAXIMUM_SEMAPHORES 500 //
>Nombre Max de Semaphore
>#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 12 //
>Nombre Max de Port
>Serie
>
>#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM // A la
>place de MiniIMFS pour
>avoir le support des link
>
>// #define CONFIGURE_MEMORY_OVERHEAD 500
>// Ko suplementaire
>
>#define STACK_CHECKER_ON 1 // Activation du
>Stach Check
>
>#define CONFIGURE_INIT
>
>
>rtems_task Init(rtems_task_argument)
>{
> /* Starting Application */
>}
>
>/*
> * The user is defining their own table information
>and setting the
> * appropriate variables.
> */
>
>/***************************************************************************
>******************/
>
>#define CONFIGURE_HAS_OWN_INIT_TASK_TABLE
>
>#ifdef CONFIGURE_HAS_OWN_INIT_TASK_TABLE
>
>#undef CONFIGURE_INIT_TASK_NAME
>#define CONFIGURE_INIT_TASK_NAME
>rtems_build_name( 'm', 'a', 'i',
>'n' )
>
>#undef CONFIGURE_INIT_TASK_STACK_SIZE
>#define CONFIGURE_INIT_TASK_STACK_SIZE
>RTEMS_MINIMUM_STACK_SIZE // 0x6000
>de place laissé par FBUG
>
>#undef CONFIGURE_INIT_TASK_PRIORITY
>#define CONFIGURE_INIT_TASK_PRIORITY 1
>
>#undef CONFIGURE_INIT_TASK_ATTRIBUTES
>#define CONFIGURE_INIT_TASK_ATTRIBUTES
>RTEMS_DEFAULT_ATTRIBUTES
>
>#undef CONFIGURE_INIT_TASK_ENTRY_POINT
>#define CONFIGURE_INIT_TASK_ENTRY_POINT Init
>
>#undef CONFIGURE_INIT_TASK_INITIAL_MODES
>#define CONFIGURE_INIT_TASK_INITIAL_MODES
>RTEMS_PREEMPT
>
>#undef CONFIGURE_INIT_TASK_ARGUMENTS
>#define CONFIGURE_INIT_TASK_ARGUMENTS 0
>
>#ifdef CONFIGURE_INIT
>
>rtems_initialization_tasks_table
>Initialization_tasks[] = {
> { CONFIGURE_INIT_TASK_NAME,
> CONFIGURE_INIT_TASK_STACK_SIZE,
> CONFIGURE_INIT_TASK_PRIORITY,
> CONFIGURE_INIT_TASK_ATTRIBUTES,
> CONFIGURE_INIT_TASK_ENTRY_POINT,
> CONFIGURE_INIT_TASK_INITIAL_MODES,
> CONFIGURE_INIT_TASK_ARGUMENTS
> }
>};
>
>#endif
>
>#define CONFIGURE_INIT_TASK_TABLE Initialization_tasks
>
>#define CONFIGURE_INIT_TASK_TABLE_SIZE \
> sizeof(CONFIGURE_INIT_TASK_TABLE) /
>sizeof(rtems_initialization_tasks_table)
>
>#endif /* CONFIGURE_HAS_OWN_INIT_TASK_TABLE */
>
>/***************************************************************************
>******************/
>
>#include <confdefs.h>
>
>--
>Cedric AUBERT
>Ingenieur Recherche et Developpement
>SDEL Controle Commande
>D2A - Rue Nungesser et Coli
>44860 Saint Aignan de Grand Lieu
>FRANCE
>
>Tel : +33 (0)2 40 84 50 00
>Poste : 5109
>Fax : +33 (0)2 40 84 51 10
>
>E-mail : cedric_aubert at yahoo.fr
>Web : http://www.sdelcc.com
>
>
>__________________________________
>Do you Yahoo!?
>Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes
>http://hotjobs.sweepstakes.yahoo.com/signingbonus
>
>
More information about the users
mailing list