예제 #1
0
void create_mem(){
    int u;
    woempa(9,"Entering function to create mem for the monitortest\n");
    cyg_mempool_fix_create(m_thread,11 * sizeof(x_Thread),sizeof(x_Thread),&monitorpool1,&mpool1);
    cyg_mempool_fix_create(m_stack,11 * stacksize,stacksize,&monitorpool2,&mpool2);
    woempa(9,"Memory for monitor test created\n");

    woempa(9,"Allocating memory for threads that test monitors\n");
    for(u=0;u<10;u++){
	mstruct[u] = cyg_mempool_fix_alloc(monitorpool1);
	mstack[u] = cyg_mempool_fix_alloc(monitorpool2);
	
    }
    woempa(9,"Na alloc\n");
	
	
}
예제 #2
0
static void entry0( cyg_addrword_t data )
{
    cyg_uint8 *p0, *p1, *p2;
    cyg_mempool_info info0, info1, info2;

    cyg_mempool_fix_get_info(mempool0, &info0);
    CYG_TEST_CHECK(mem[0] == info0.base, "get_arena: base wrong");
    CYG_TEST_CHECK(MEMSIZE == info0.size, "get_arena: size wrong");

    CYG_TEST_CHECK(0 < info0.maxfree && info0.maxfree <= info0.size,
                   "get_arena: maxfree wildly wrong");
    
    CYG_TEST_CHECK(100 == info0.blocksize, "get_blocksize wrong" );

    CYG_TEST_CHECK(info0.totalmem > 0, "Negative total memory" );
    CYG_TEST_CHECK(info0.freemem > 0, "Negative free memory" );
    CYG_TEST_CHECK(info0.totalmem <= MEMSIZE, 
                   "info.totalsize: Too much memory");
    CYG_TEST_CHECK(info0.freemem <= info0.totalmem ,
                   "More memory free than possible" );

    CYG_TEST_CHECK( !cyg_mempool_fix_waiting(mempool0)    ,
                    "Thread waiting for memory; there shouldn't be");
    
#ifdef CYGSEM_MEMALLOC_ALLOCATOR_FIXED_THREADAWARE
    p0 = cyg_mempool_fix_alloc(mempool0);
    check_in_mp0(p0, 100);

    cyg_mempool_fix_get_info(mempool0, &info1);
    CYG_TEST_CHECK(info1.freemem > 0, "Negative free memory" );
    CYG_TEST_CHECK(info1.freemem < info0.freemem,
                   "Free memory didn't decrease after allocation" );

    p1 = NULL;
    while((p2 = cyg_mempool_fix_try_alloc(mempool0)    ))
        p1 = p2;
    
    cyg_mempool_fix_get_info(mempool0, &info1);
    cyg_mempool_fix_free(mempool0, p0);

    cyg_mempool_fix_get_info(mempool0, &info2);
    CYG_TEST_CHECK(info2.freemem > info1.freemem,
                   "Free memory didn't increase after free" );
#endif
    
    // should be able to reallocate now a block is free
    p0 = cyg_mempool_fix_try_alloc(mempool0);
    check_in_mp0(p0, 100);

    CYG_TEST_CHECK(p1+100 <= p0 || p1 >= p0+100,
                   "Ranges of allocated memory overlap");

    cyg_mempool_fix_free(mempool0, p0);
    cyg_mempool_fix_free(mempool0, p1);
    
#ifdef CYGSEM_MEMALLOC_ALLOCATOR_FIXED_THREADAWARE
# ifdef CYGFUN_KERNEL_THREADS_TIMER
    // This shouldn't have to wait
    p0 = cyg_mempool_fix_timed_alloc(mempool0, cyg_current_time()+100000);
    check_in_mp0(p0, 100);
    p1 = cyg_mempool_fix_timed_alloc(mempool0, cyg_current_time()+20);
    check_in_mp0(p1, 10);
    p1 = cyg_mempool_fix_timed_alloc(mempool0, cyg_current_time()+20);
    CYG_TEST_CHECK(NULL == p1, "Timed alloc unexpectedly worked");
    
    // Expect thread 1 to have run while processing previous timed
    // allocation.  It should therefore be waiting.
    CYG_TEST_CHECK(cyg_mempool_fix_waiting(mempool1),
                   "There should be a thread waiting");
# endif
#endif
    
    CYG_TEST_PASS_FINISH("Kernel C API Fixed memory pool 1 OK");
}
예제 #3
0
static void entry1( cyg_addrword_t data )
{
    while(NULL != cyg_mempool_fix_alloc(mempool1))
        ;
    CYG_TEST_FAIL("alloc returned NULL");
}