本文整理汇总了C++中eTaskGetState函数的典型用法代码示例。如果您正苦于以下问题:C++ eTaskGetState函数的具体用法?C++ eTaskGetState怎么用?C++ eTaskGetState使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了eTaskGetState函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: prvTestMasterTask
static void prvTestMasterTask( void *pvParameters )
{
BaseType_t xError;
/* The handle to the slave task is passed in as the task parameter. */
TaskHandle_t xTestSlaveTaskHandle = ( TaskHandle_t ) pvParameters;
/* Avoid compiler warnings. */
( void ) pvParameters;
/* Create the event group used by the tasks ready for the initial tests. */
xEventGroup = xEventGroupCreate();
configASSERT( xEventGroup );
/* Perform the tests that block two tasks on different combinations of bits,
then set each bit in turn and check the correct tasks unblock at the correct
times. */
xError = prvSelectiveBitsTestMasterFunction();
for( ;; ) {
/* Recreate the event group ready for the next cycle. */
xEventGroup = xEventGroupCreate();
configASSERT( xEventGroup );
/* Perform the tests that check the behaviour when a single task is
blocked on various combinations of event bits. */
xError = prvBitCombinationTestMasterFunction( xError, xTestSlaveTaskHandle );
/* Perform the task synchronisation tests. */
xError = prvPerformTaskSyncTests( xError, xTestSlaveTaskHandle );
/* Delete the event group. */
vEventGroupDelete( xEventGroup );
/* Now all the other tasks should have completed and suspended
themselves ready for the next go around the loop. */
if( eTaskGetState( xTestSlaveTaskHandle ) != eSuspended ) {
xError = pdTRUE;
}
if( eTaskGetState( xSyncTask1 ) != eSuspended ) {
xError = pdTRUE;
}
if( eTaskGetState( xSyncTask2 ) != eSuspended ) {
xError = pdTRUE;
}
/* Only increment the cycle variable if no errors have been detected. */
if( xError == pdFALSE ) {
ulTestMasterCycles++;
}
configASSERT( xError == pdFALSE );
}
}
示例2: test_task_get_state
void test_task_get_state(void* arg)
{
//Current task should return eRunning
TEST_ASSERT(eTaskGetState(xTaskGetCurrentTaskHandle()) == eRunning);
//Idle task of current core should return eReady
TEST_ASSERT(eTaskGetState(xTaskGetIdleTaskHandle()) == eReady);
//Blocked Task should return eBlocked
TEST_ASSERT(eTaskGetState(blocked_task_handle) == eBlocked);
//Suspended Task should return eSuspended
TEST_ASSERT(eTaskGetState(suspended_task_handle) == eSuspended);
xSemaphoreGive(done_sem);
vTaskDelete(NULL);
}
示例3: task_state_consistent
// returns whether the given task state is consistent with its current RTOS state (given by its task handle state)
static bool task_state_consistent(bool expected_state, task_type_t task_id) {
configASSERT(task_handles[task_id] != NULL && *task_handles[task_id] != NULL);
eTaskState task_state_rtos = eTaskGetState(*task_handles[task_id]);
// a task is "running" (expected_state should be true) if it's NOT suspended
// see https://www.freertos.org/RTOS-task-states.html
return expected_state == (task_state_rtos != eSuspended);
}
示例4: suspend
void Task::suspend() {
if (mTaskHandle && eTaskGetState(mTaskHandle) != eSuspended) {
debug::log("Suspend task: " + getName());
vTaskSuspend(mTaskHandle);
afterSuspension();
}
}
示例5: osThreadIsSuspended
/**
* @brief Check if a thread is already suspended or not.
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
* @retval status code that indicates the execution status of the function.
*/
osStatus osThreadIsSuspended(osThreadId thread_id)
{
if (eTaskGetState(thread_id) == eSuspended)
return osOK;
else
return osErrorOS;
}
示例6: osThreadGetState
/**
* @brief Obtain the state of any thread.
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
* @retval the stae of the thread, states are encoded by the osThreadState enumerated type.
*/
osThreadState osThreadGetState(osThreadId thread_id)
{
eTaskState ThreadState;
osThreadState result;
ThreadState = eTaskGetState(thread_id);
switch (ThreadState)
{
case eRunning :
result = osThreadRunning;
break;
case eReady :
result = osThreadReady;
break;
case eBlocked :
result = osThreadBlocked;
break;
case eSuspended :
result = osThreadSuspended;
break;
case eDeleted :
result = osThreadDeleted;
break;
default:
result = osThreadError;
}
return result;
}
示例7: print_task_info
void print_task_info(void) {
print("\n\n===========Task Information===========\n");
print("state consistency: %s\n",
check_task_state_consistency() ? "consistent": "!! INCONSISTENT TASK STATES !!");
for (int task = 0; task < NUM_TASKS; task++) {
eTaskState task_state = eTaskGetState(*(task_handles[task]));
uint16_t stack_space_left = uxTaskGetStackHighWaterMark(*task_handles[task]) * sizeof(portSTACK_TYPE);
uint16_t stack_size = get_task_stack_size(task);
uint16_t stack_space_available = stack_size * sizeof(portSTACK_TYPE);
// note watchdog task as checked out in sys test so it doesn't look like something's up
bool checked_in = (task == WATCHDOG_TASK) ? false : _get_task_checked_in(task);
uint32_t last_check_in = _get_task_checked_in_time(task);
uint32_t task_freq = get_task_freq(task);
print("%s: %s (%s) LRT: %5d (%3d%%) stack: %4d / %4d (%3d%%)\n",
get_task_str(task),
get_task_state_str(task_state),
checked_in ? "checked in " : "checked out",
checked_in ? (xTaskGetTickCount() - last_check_in) : 0,
checked_in ? (100 * (xTaskGetTickCount() - last_check_in) / task_freq) : 0,
stack_space_available - stack_space_left,
stack_space_available,
(100 * (stack_space_available - stack_space_left)) / stack_space_available);
}
}
示例8: xEventGroupSetBits
dispatch_queue::~dispatch_queue()
{
BaseType_t status;
// Signal to dispatch threads that it's time to wrap up
quit_ = true;
// We will join each thread to confirm exiting
for (size_t i = 0; i < threads_.size(); ++i) {
eTaskState state;
do {
// Signal wake - check exit flag
xEventGroupSetBits(notify_flags_, DISPATCH_WAKE_EVT);
// Wait until a thread signals exit. Timeout is acceptable.
xEventGroupWaitBits(notify_flags_, DISPATCH_EXIT_EVT, pdTRUE, pdFALSE, 10);
// If it was not thread_[i], that is ok, but we will loop around
// until threads_[i] has exited
state = eTaskGetState(threads_[i].thread);
} while (state != eDeleted);
threads_[i].name.clear();
}
// Cleanup event flags and mutex
vEventGroupDelete(notify_flags_);
vSemaphoreDelete(mutex_);
}
示例9: vButtonTask
void vButtonTask(void* pvParameters){
xSemaphoreTake(xButtonSemaphore,buttonNO_BLOCK);
for(;;){
xSemaphoreTake(xButtonSemaphore, portMAX_DELAY);
ulButtonPressCount++;
xSemaphoreGive(xStatusSemaphore);
if(eTaskGetState(xLedTaskHandle)== eBlocked || eTaskGetState(xLedTaskHandle)== eRunning ){
vTaskSuspend(xLedTaskHandle);
}
else if(eTaskGetState(xLedTaskHandle)==eSuspended){
vTaskResume(xLedTaskHandle);
}
vTaskDelay(500);
}
}
示例10: MPU_eTaskGetState
eTaskState MPU_eTaskGetState( TaskHandle_t pxTask )
{
BaseType_t xRunningPrivileged = prvRaisePrivilege();
eTaskState eReturn;
eReturn = eTaskGetState( pxTask );
portRESET_PRIVILEGE( xRunningPrivileged );
return eReturn;
}
示例11: MPU_eTaskGetState
eTaskState MPU_eTaskGetState( xTaskHandle pxTask )
{
portBASE_TYPE xRunningPrivileged = prvRaisePrivilege();
eTaskState eReturn;
eReturn = eTaskGetState( pxTask );
portRESET_PRIVILEGE( xRunningPrivileged );
return eReturn;
}
示例12: MPU_eTaskGetState
eTaskState MPU_eTaskGetState( TaskHandle_t pxTask )
{
BaseType_t xRunningPrivileged = xPortRaisePrivilege();
eTaskState eReturn;
eReturn = eTaskGetState( pxTask );
vPortResetPrivilege( xRunningPrivileged );
return eReturn;
}
示例13: getName
void Task::start() {
if (mTaskHandle == NULL) {
debug::log("Creating task: " + getName());
// get task name
String taskName = getName();
// start the task
if (xTaskCreate(_task, taskName.c_str(), ( uint8_t ) 255, static_cast<void*>(this), 2, &mTaskHandle) != pdPASS) {
debug::stopWithMessage("Failed to create " + getName() + " task");
}
} else if (eTaskGetState(mTaskHandle) == eSuspended) {
debug::log("Resume task: " + getName());
beforeResume();
vTaskResume(mTaskHandle);
}
}
示例14: metal_finish_threads
void metal_finish_threads(int threads, void *tids)
{
int i;
TaskHandle_t *tid_p = (TaskHandle_t *)tids;
if (!tids) {
metal_log(METAL_LOG_ERROR, "invalid argument, tids is NULL.\n");
return;
}
for (i = 0; i < threads; i++) {
eTaskState ts;
do {
taskYIELD();
ts=eTaskGetState(tid_p[i]);
} while (ts != eDeleted);
}
}
示例15: task_resume
// resumes the given task if it was suspended, and (always) checks it in to the watchdog
void task_resume(task_type_t task_id)
{
TaskHandle_t* task_handle = task_handles[task_id];
configASSERT(task_handle != NULL && *task_handle != NULL);
// always check in for watchdog when called
// (in case it wasn't, for example on BOOT)
// this is only called here so doesn't need to be safe
check_in_task_unsafe(task_id);
if (task_handle != NULL && *task_handle != NULL
&& eTaskGetState(*task_handle) == eSuspended)
{
// actually resume task (will be graceful if task_handle task is not actually suspended)
vTaskResume(*task_handle);
}
// if task_handle or it's value was NULL, we're in for a watchdog reset
// which is what we want because somethings very wrong
}