⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sbrk.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* $Id: sbrk.c,v 1.1.2.1 2003/09/29 21:43:26 joel Exp $ *//* *  sbrk.c * *  Author: Till Straumann <strauman@slac.stanford.edu>, 2002 * *  Hack around the 32bit powerpc 32M problem: * *  GCC by default uses relative branches which can not jump *  farther than 32M. Hence all program text is confined to *  a single 32M segment. *  This hack gives the RTEMS malloc region all memory below *  32M at startup. Only when this region is exhausted will sbrk *  add more memory. Loading modules may fail at that point, hence *  the user is expected to load all modules at startup _prior_ *  to malloc()ing lots of memory... * *  NOTE: it would probably be better to have a separate region *        for module code. */#include <rtems.h>#include <signal.h>#include <errno.h>#include <sys/types.h>#include <unistd.h>static rtems_unsigned32 remaining_start=0;static rtems_unsigned32 remaining_size=0;#define LIMIT_32M  0x02000000rtems_unsigned32_bsp_sbrk_init(rtems_unsigned32 heap_start, rtems_unsigned32 *heap_size_p){  rtems_unsigned32 rval=0;  remaining_start =  heap_start;  remaining_size  =*  heap_size_p;  if (remaining_start < LIMIT_32M &&      remaining_start + remaining_size > LIMIT_32M) {    /* clip at LIMIT_32M */    rval = remaining_start + remaining_size - LIMIT_32M;    *heap_size_p = LIMIT_32M - remaining_start;  }  return rval;}void * sbrk(ptrdiff_t incr){  void *rval=(void*)-1;  if (incr <= remaining_size) {    remaining_size-=incr;    rval = (void*)remaining_start;    remaining_start += incr;  } else {    errno = ENOMEM;  }  return rval;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -