int testMapGetAllBlocks(void **p) { int retValue; /* task_mem_map_xxx interface return value */ void *errPtr; /* Pointer to block */ TC_PRINT("Function %s\n", __func__); /* Number of blocks in the map is defined in MDEF file */ for (int i = 0; i < NUMBLOCKS; i++) { /* Verify number of used blocks in the map */ retValue = task_mem_map_used_get(MAP_LgBlks); if (verifyRetValue(i, retValue)) { TC_PRINT("MAP_LgBlks used %d blocks\n", retValue); } else { TC_ERROR("Failed task_mem_map_used_get for MAP_LgBlks, i=%d, retValue=%d\n", i, retValue); return TC_FAIL; } /* Get memory block */ retValue = task_mem_map_alloc(MAP_LgBlks, &p[i], TICKS_NONE); if (verifyRetValue(RC_OK, retValue)) { TC_PRINT(" task_mem_map_alloc OK, p[%d] = %p\n", i, p[i]); } else { TC_ERROR("Failed task_mem_map_alloc, i=%d, retValue %d\n", i, retValue); return TC_FAIL; } } /* for */ /* Verify number of used blocks in the map - expect all blocks are used */ retValue = task_mem_map_used_get(MAP_LgBlks); if (verifyRetValue(NUMBLOCKS, retValue)) { TC_PRINT("MAP_LgBlks used %d blocks\n", retValue); } else { TC_ERROR("Failed task_mem_map_used_get for MAP_LgBlks, retValue %d\n", retValue); return TC_FAIL; } /* Try to get one more block and it should fail */ retValue = task_mem_map_alloc(MAP_LgBlks, &errPtr, TICKS_NONE); if (verifyRetValue(RC_FAIL, retValue)) { TC_PRINT(" task_mem_map_alloc RC_FAIL expected as all (%d) blocks are used.\n", NUMBLOCKS); } else { TC_ERROR("Failed task_mem_map_alloc, expect RC_FAIL, got %d\n", retValue); return TC_FAIL; } PRINT_LINE; return TC_PASS; } /* testMapGetAllBlocks */
void* upm_malloc(int mem_map, int size){ void *mem; #if defined(linux) mem = malloc(size); if(mem == NULL){ printf("unable to allocate memory"); } else{ printf("memory allocated successfully\n"); } #elif defined(CONFIG_BOARD_ARDUINO_101) || defined(CONFIG_BOARD_ARDUINO_101_SSS) || defined(CONFIG_BOARD_QUARK_D2000_CRB) kmemory_map_t map_name = (kmemory_map_t) mem_map; if(task_mem_map_alloc(map_name, &mem, TICKS_UNLIMITED) == RC_OK){ printf("memory allocated successfully\n"); } else{ printf("unable to allocate memory"); mem = NULL; } #endif return mem; }
void RegressionTask(void) { int retValue; /* task_mem_map_xxx interface return value */ void *b; /* Pointer to memory block */ void *ptr[NUMBLOCKS]; /* Pointer to memory block */ /* Part 1 of test */ TC_START("Test Microkernel Memory Maps"); TC_PRINT("Starts %s\n", __func__); /* Test task_mem_map_alloc */ tcRC = testMapGetAllBlocks(ptr); if (tcRC == TC_FAIL) { TC_ERROR("Failed testMapGetAllBlocks function\n"); goto exitTest; /* terminate test */ } printPointers(ptr); /* Test task_mem_map_free */ tcRC = testMapFreeAllBlocks(ptr); if (tcRC == TC_FAIL) { TC_ERROR("Failed testMapFreeAllBlocks function\n"); goto exitTest; /* terminate test */ } printPointers(ptr); task_sem_give(SEM_REGRESSDONE); /* Allow HelperTask to run */ /* Wait for HelperTask to finish */ task_sem_take(SEM_HELPERDONE, TICKS_UNLIMITED); /* * Part 3 of test. * * HelperTask got all memory blocks. There is no free block left. * The call will timeout. Note that control does not switch back to * HelperTask as it is waiting for SEM_REGRESSDONE. */ retValue = task_mem_map_alloc(MAP_LgBlks, &b, 2); if (verifyRetValue(RC_TIME, retValue)) { TC_PRINT("%s: task_mem_map_alloc timeout expected\n", __func__); } else { TC_ERROR("Failed task_mem_map_alloc, retValue %d\n", retValue); tcRC = TC_FAIL; goto exitTest; /* terminate test */ } TC_PRINT("%s: start to wait for block\n", __func__); task_sem_give(SEM_REGRESSDONE); /* Allow HelperTask to run part 4 */ retValue = task_mem_map_alloc(MAP_LgBlks, &b, 5); if (verifyRetValue(RC_OK, retValue)) { TC_PRINT("%s: task_mem_map_alloc OK, block allocated at %p\n", __func__, b); } else { TC_ERROR("Failed task_mem_map_alloc, retValue %d\n", retValue); tcRC = TC_FAIL; goto exitTest; /* terminate test */ } /* Wait for HelperTask to complete */ task_sem_take(SEM_HELPERDONE, TICKS_UNLIMITED); TC_PRINT("%s: start to wait for block\n", __func__); task_sem_give(SEM_REGRESSDONE); /* Allow HelperTask to run part 5 */ retValue = task_mem_map_alloc(MAP_LgBlks, &b, TICKS_UNLIMITED); if (verifyRetValue(RC_OK, retValue)) { TC_PRINT("%s: task_mem_map_alloc OK, block allocated at %p\n", __func__, b); } else { TC_ERROR("Failed task_mem_map_alloc, retValue %d\n", retValue); tcRC = TC_FAIL; goto exitTest; /* terminate test */ } /* Wait for HelperTask to complete */ task_sem_take(SEM_HELPERDONE, TICKS_UNLIMITED); /* Free memory block */ TC_PRINT("%s: Used %d block\n", __func__, task_mem_map_used_get(MAP_LgBlks)); task_mem_map_free(MAP_LgBlks, &b); TC_PRINT("%s: 1 block freed, used %d block\n", __func__, task_mem_map_used_get(MAP_LgBlks)); exitTest: TC_END_RESULT(tcRC); TC_END_REPORT(tcRC); } /* RegressionTask */