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"); }
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"); }
static void entry1( cyg_addrword_t data ) { while(NULL != cyg_mempool_fix_alloc(mempool1)) ; CYG_TEST_FAIL("alloc returned NULL"); }