ecos栈管理.docxVIP

  • 24
  • 1
  • 约8.19千字
  • 约 9页
  • 2017-05-27 发布于河南
  • 举报
ecos栈管理

??在嵌入式系统中,为了对内存资源进行很好地控制,避免发生不可预测的后果,一般建议使用静态内存分配。ecos是专门为实时嵌入式系统量身定做的操作系统,它的大多数系统调用在被使用时都要求将预先指定的由系统调用所产生的目标对象的内存地址传递给该系统调用(即对其进行静态内存分配)。如第一讲cyg_thread_create系统调用函数就要求传入句柄指针和线程数据结构体指针及堆栈起址,而这三个指针对应的变量都是预先分配的静态变量。如下:????static char stack[4][STACK_SIZE];????static cyg_thread thread_data[4];????static cyg_handle_t thread_handle[4];????????cyg_thread_create(10,????????????????// Priority - just a number??????????????????????taska,?????????????// entry??????????????????????1,?????????????????// entry parameter??????????????????????taska,???????????// Name??????????????????????stack[1],?????????// Stack?????????????????-------------??????????????????????STACK_SIZE,????????// Size??????????????????????thread_handle[1], // Handle????????????????-------------??????????????????????thread_data[1]????// Thread data structure -------------????????????);????????对比ucos for 51中类似的创建任务系统调用,可见,两者的内核数据和堆栈空间都是静态分配的。不过,ecos更灵活,它的内核数据存储空间也由应用程序提供,实际用多少变量就分配多少空间,而ucos是在配置内核时预先定死的,不够灵活。????#define OS_MAX_TASKS?????????????27????OS_STK TaskStartStkyya[MaxStkSize];//注意:我在ASM文件中设置?STACK空间为40H即64。????OSTaskCreate(TaskStartyya, (void *)0, TaskStartStkyya[0],2);????????ecos是一个单进程多线程系统,作为一个嵌入式可配置操作系统,它的内存管理相对简单,不分段也不分页,没有存储保护,直接映射成一个平板内存。ecos采用一种基于内存池的动态内存分配机制,这是由uITRON兼容层实现的一种灵活有效的内存管理方式。????在实际使用时,内存可能不连续,ecos通过定义多个堆段自动分配内存池,不过,不连续内存的管理会增加开销,最好不用这种不连续的堆。开发板有一块内存是CPU内部的,还有一块是外部的,速度、容量、成本不同,可以把常用数据存入内部RAM以加快处理速度。????在一些特殊情况下,某些系统具有现场增加内存的支持能力,这种情形要求对这些内存进行自动分配。为此,在硬件抽象层中(hal_intr.h)有一个宏定义:HAL_MEM_REAL_REGION_TOP(cyg_uint8 *regionend),该宏采用正常情况下的内存末端地址作为参数。它返回一个由HAL实时检测到的实际内存末端地址。通过使用该宏,可以灵活地对多个内存区进行操作。????ecos允许对拥有的所有可用内存的内存池进行自动定义,可以自动分配堆的大小。????ecos提供了两种内存池:一种是变长内存池(variable size memory pool),根据申请的大小进行分配;另一种是定长内存池(fixed size memory pool),以固定大小的块为单位进行分配。变长内存池使用链表来进行管理,定长内存池使用位图来进行管理。C库函数malloc使用变长内存池实现内存分配,用户可以直接使用C库函数malloc和free管理内存。????下面分别介绍两种内存池对应的API函数使用方法:(函数定义位于头文件cyg/memalloc/kapi.h内)????????抽象出来的内存操作主要包括:创建、删除、分配(阻塞/超时阻塞/非阻塞)、释放、查询等待、查询信息。************************ 固定长度内存分配API ***********

文档评论(0)

1亿VIP精品文档

相关文档