/* ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio. This file is part of ChibiOS. ChibiOS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. ChibiOS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /** * @file chheap.h * @brief Heaps macros and structures. * * @addtogroup heaps * @{ */ #ifndef CHHEAP_H #define CHHEAP_H #if (CH_CFG_USE_HEAP == TRUE) || defined(__DOXYGEN__) /*===========================================================================*/ /* Module constants. */ /*===========================================================================*/ /** * @brief Minimum alignment used for heap. * @note Cannot use the sizeof operator in this macro. */ #if (SIZEOF_PTR == 4) || defined(__DOXYGEN__) #define CH_HEAP_ALIGNMENT 8 #elif (SIZEOF_PTR == 2) #define CH_HEAP_ALIGNMENT 4 #else #error "unsupported pointer size" #endif /*===========================================================================*/ /* Module pre-compile time settings. */ /*===========================================================================*/ /*===========================================================================*/ /* Derived constants and error checks. */ /*===========================================================================*/ #if CH_CFG_USE_MEMCORE == FALSE #error "CH_CFG_USE_HEAP requires CH_CFG_USE_MEMCORE" #endif #if (CH_CFG_USE_MUTEXES == FALSE) && (CH_CFG_USE_SEMAPHORES == FALSE) #error "CH_CFG_USE_HEAP requires CH_CFG_USE_MUTEXES and/or CH_CFG_USE_SEMAPHORES" #endif /*===========================================================================*/ /* Module data structures and types. */ /*===========================================================================*/ /** * @brief Type of a memory heap. */ typedef struct memory_heap memory_heap_t; /** * @brief Type of a memory heap header. */ typedef union heap_header heap_header_t; /** * @brief Memory heap block header. */ union heap_header { stkalign_t align; struct { heap_header_t *next; /**< @brief Next block in free list. */ size_t pages; /**< @brief Size of the area in pages. */ } free; struct { memory_heap_t *heap; /**< @brief Block owner heap. */ size_t size; /**< @brief Size of the area in bytes. */ } used; }; /** * @brief Structure describing a memory heap. */ struct memory_heap { memgetfunc_t provider; /**< @brief Memory blocks provider for this heap. */ heap_header_t header; /**< @brief Free blocks list header. */ #if CH_CFG_USE_MUTEXES == TRUE mutex_t mtx; /**< @brief Heap access mutex. */ #else semaphore_t sem; /**< @brief Heap access semaphore. */ #endif }; /*===========================================================================*/ /* Module macros. */ /*===========================================================================*/ /** * @brief Allocation of an aligned static heap buffer. */ #define CH_HEAP_AREA(name, size) \ ALIGNED_VAR(CH_HEAP_ALIGNMENT) \ uint8_t name[MEM_ALIGN_NEXT((size), CH_HEAP_ALIGNMENT)] /*===========================================================================*/ /* External declarations. */ /*===========================================================================*/ #ifdef __cplusplus extern "C" { #endif void _heap_init(void); void chHeapObjectInit(memory_heap_t *heapp, void *buf, size_t size); void *chHeapAllocAligned(memory_heap_t *heapp, size_t size, unsigned align); void chHeapFree(void *p); size_t chHeapStatus(memory_heap_t *heapp, size_t *totalp, size_t *largestp); #ifdef __cplusplus } #endif /*===========================================================================*/ /* Module inline functions. */ /*===========================================================================*/ /** * @brief Allocates a block of memory from the heap by using the first-fit * algorithm. * @details The allocated block is guaranteed to be properly aligned for a * pointer data type. * * @param[in] heapp pointer to a heap descriptor or @p NULL in order to * access the default heap. * @param[in] size the size of the block to be allocated. Note that the * allocated block may be a bit bigger than the requested * size for alignment and fragmentation reasons. * @return A pointer to the allocated block. * @retval NULL if the block cannot be allocated. * * @api */ static inline void *chHeapAlloc(memory_heap_t *heapp, size_t size) { return chHeapAllocAligned(heapp, size, CH_HEAP_ALIGNMENT); } /** * @brief Returns the size of an allocated block. * @note The returned value is the requested size, the real size is the * same value aligned to the next @p CH_HEAP_ALIGNMENT multiple. * * @param[in] p pointer to the memory block * * @api */ static inline size_t chHeapGetSize(const void *p) { return ((heap_header_t *)p)->used.size; } #endif /* CH_CFG_USE_HEAP == TRUE */ #endif /* CHHEAP_H */ /** @} */ 93' href='#n93'>93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
/******************************************************************************
** File: osconfig.h
** $Id: osconfig.h 1.2 2013/12/16 13:08:05GMT-05:00 acudmore Exp  $
**
** Purpose:
**   This header file contains the OS API  configuration parameters.
**
** Author:  A. Cudmore
**
** Notes:
**
** $Date: 2013/12/16 13:08:05GMT-05:00 $
** $Revision: 1.2 $
** $Log: osconfig.h  $
** Revision 1.2 2013/12/16 13:08:05GMT-05:00 acudmore 
** use OS_FS_PHYS_NAME_LEN macro instead of hard-coded value
** Revision 1.1 2013/07/19 14:05:44GMT-05:00 acudmore 
** Initial revision
** Member added to project c:/MKSDATA/MKS-REPOSITORY/MKS-OSAL-REPOSITORY/src/bsp/sis-rtems/config/project.pj
** Revision 1.8 2011/12/05 12:41:15GMT-05:00 acudmore 
** Removed OS_MEM_TABLE_SIZE parameter
** Revision 1.7 2009/07/14 14:24:53EDT acudmore 
** Added parameter for local path size.
** Revision 1.6 2009/07/07 14:01:02EDT acudmore 
** Changed OS_MAX_NUM_OPEN_FILES to 50 to preserve data/telmetry space
** Revision 1.5 2009/07/07 13:58:22EDT acudmore 
** Added OS_STATIC_LOADER define to switch between static and dynamic loaders.
** Revision 1.4 2009/06/04 11:43:43EDT rmcgraw 
** DCR8290:1 Increased settings for max tasks,queues,sems and modules
** Revision 1.3 2008/08/20 15:49:37EDT apcudmore 
** Add OS_MAX_TIMERS parameter for Timer API
** Revision 1.2 2008/06/20 15:17:56EDT apcudmore 
** Added conditional define for Module Loader API configuration
** Revision 1.1 2008/04/20 22:35:19EDT ruperera 
** Initial revision
** Member added to project c:/MKSDATA/MKS-REPOSITORY/MKS-OSAL-REPOSITORY/build/inc/project.pj
** Revision 1.6 2008/02/12 13:27:59EST apcudmore 
** New API updates:
**   - fixed RTEMS osapi compile error
**   - related makefile fixes
**   - header file parameter update
**
** Revision 1.1 2005/06/09 10:57:58EDT rperera
** Initial revision
**
******************************************************************************/

#ifndef _osconfig_
#define _osconfig_

/*
** Platform Configuration Parameters for the OS API
*/

#define OS_MAX_TASKS                64 /* Not used.*/
#define OS_MAX_QUEUES               64
#define OS_MAX_COUNT_SEMAPHORES     20
#define OS_MAX_BIN_SEMAPHORES       20
#define OS_MAX_MUTEXES              20

/*
** Maximum length for an absolute path name
*/
#define OS_MAX_PATH_LEN     64

/*
** Maximum length for a local or host path/filename.
**   This parameter can consist of the OSAL filename/path + 
**   the host OS physical volume name or path.
*/
#define OS_MAX_LOCAL_PATH_LEN (OS_MAX_PATH_LEN + OS_FS_PHYS_NAME_LEN)


/* 
** The maxium length allowed for a object (task,queue....) name 
*/
#define OS_MAX_API_NAME     20

/* 
** The maximum length for a file name 
*/
#define OS_MAX_FILE_NAME    20

/* 
** These defines are for OS_printf
*/
#define OS_BUFFER_SIZE 172
#define OS_BUFFER_MSG_DEPTH 100

/* This #define turns on a utility task that
 * will read the statements to print from
 * the OS_printf function. If you want OS_printf
 * to print the text out itself, comment this out 
 * 
 * NOTE: The Utility Task #defines only have meaning 
 * on the VxWorks operating systems
 */
 
#define OS_UTILITY_TASK_ON


#ifdef OS_UTILITY_TASK_ON 
    #define OS_UTILITYTASK_STACK_SIZE 2048
    /* some room is left for other lower priority tasks */
    #define OS_UTILITYTASK_PRIORITY   245
#endif


/* 
** the size of a command that can be passed to the underlying OS 
*/
#define OS_MAX_CMD_LEN 1000

/*
** This define will include the OS network API.
** It should be turned off for targtets that do not have a network stack or 
** device ( like the basic RAD750 vxWorks BSP )
*/
#undef OS_INCLUDE_NETWORK

/* 
** This is the maximum number of open file descriptors allowed at a time 
*/
#define OS_MAX_NUM_OPEN_FILES 50 

/* 
** This defines the filethe input command of OS_ShellOutputToFile
** is written to in the VxWorks6 port 
*/
#define OS_SHELL_CMD_INPUT_FILE_NAME "/ram/OS_ShellCmd.in"

/* 
** This define sets the queue implentation of the Linux port to use sockets 
** commenting this out makes the Linux port use the POSIX message queues.
*/
/* #define OSAL_SOCKET_QUEUE */

/*
** Module loader/symbol table is optional
*/
#undef OS_INCLUDE_MODULE_LOADER

#ifdef OS_INCLUDE_MODULE_LOADER
   /*
   ** This define sets the size of the OS Module Table, which keeps track of the loaded modules in 
   ** the running system. This define must be set high enough to support the maximum number of
   ** loadable modules in the system. If the the table is filled up at runtime, a new module load
   ** would fail.
   */
   #define OS_MAX_MODULES 10 

   /*
   ** The Static Loader define is used for switching between the Dynamic and Static loader implementations.
   */
   /* #define OS_STATIC_LOADER */

#endif


/*
** This define sets the maximum symbol name string length. It is used in implementations that 
** support the symbols and symbol lookup.
*/
#define OS_MAX_SYM_LEN 64


/*
** This define sets the maximum number of timers available
*/
#define OS_MAX_TIMERS         5

#endif