void RegressionTask(void *arg1, void *arg2, void *arg3) { u32_t nCalls = 0; ARG_UNUSED(arg1); ARG_UNUSED(arg2); ARG_UNUSED(arg3); k_sem_give(&ALT_SEM); /* Activate AlternateTask() */ nCalls = criticalLoop(nCalls); /* Wait for AlternateTask() to complete */ zassert_true(k_sem_take(®RESS_SEM, TEST_TIMEOUT) == 0, "Timed out waiting for REGRESS_SEM"); zassert_equal(criticalVar, nCalls + altTaskIterations, "Unexpected value for <criticalVar>"); k_sched_time_slice_set(10, 10); k_sem_give(&ALT_SEM); /* Re-activate AlternateTask() */ nCalls = criticalLoop(nCalls); /* Wait for AlternateTask() to finish */ zassert_true(k_sem_take(®RESS_SEM, TEST_TIMEOUT) == 0, "Timed out waiting for REGRESS_SEM"); zassert_equal(criticalVar, nCalls + altTaskIterations, "Unexpected value for <criticalVar>"); k_sem_give(&TEST_SEM); }
void RegressionTask(void) { uint32_t nCalls = 0; int status; TC_START("Test Microkernel Critical Section API\n"); task_sem_give(ALT_SEM); /* Activate AlternateTask() */ nCalls = criticalLoop(nCalls); /* Wait for AlternateTask() to complete */ status = task_sem_take_wait_timeout(REGRESS_SEM, TEST_TIMEOUT); if (status != RC_OK) { TC_ERROR("Timed out waiting for REGRESS_SEM\n"); goto errorReturn; } if (criticalVar != nCalls + altTaskIterations) { TC_ERROR("Unexpected value for <criticalVar>. Expected %d, got %d\n", nCalls + altTaskIterations, criticalVar); goto errorReturn; } TC_PRINT("Obtained expected <criticalVar> value of %u\n", criticalVar); TC_PRINT("Enabling time slicing ...\n"); sys_scheduler_time_slice_set(1, 10); task_sem_give(ALT_SEM); /* Re-activate AlternateTask() */ nCalls = criticalLoop(nCalls); /* Wait for AlternateTask() to finish */ status = task_sem_take_wait_timeout(REGRESS_SEM, TEST_TIMEOUT); if (status != RC_OK) { TC_ERROR("Timed out waiting for REGRESS_SEM\n"); goto errorReturn; } if (criticalVar != nCalls + altTaskIterations) { TC_ERROR("Unexpected value for <criticalVar>. Expected %d, got %d\n", nCalls + altTaskIterations, criticalVar); goto errorReturn; } TC_PRINT("Obtained expected <criticalVar> value of %u\n", criticalVar); TC_END_RESULT(TC_PASS); TC_END_REPORT(TC_PASS); return; errorReturn: TC_END_RESULT(TC_FAIL); TC_END_REPORT(TC_FAIL); }
void AlternateTask(void) { task_sem_take_wait(ALT_SEM); /* Wait to be activated */ altTaskIterations = criticalLoop(altTaskIterations); task_sem_give(REGRESS_SEM); task_sem_take_wait(ALT_SEM); /* Wait to be re-activated */ altTaskIterations = criticalLoop(altTaskIterations); task_sem_give(REGRESS_SEM); }
void AlternateTask(void *arg1, void *arg2, void *arg3) { ARG_UNUSED(arg1); ARG_UNUSED(arg2); ARG_UNUSED(arg3); k_sem_take(&ALT_SEM, K_FOREVER); /* Wait to be activated */ altTaskIterations = criticalLoop(altTaskIterations); k_sem_give(®RESS_SEM); k_sem_take(&ALT_SEM, K_FOREVER); /* Wait to be re-activated */ altTaskIterations = criticalLoop(altTaskIterations); k_sem_give(®RESS_SEM); }