mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	New unity component can be used for testing other applications. Upstream version of Unity is included as a submodule. Utilities specific to ESP-IDF unit tests (partitions, leak checking setup/teardown functions, etc) are kept only in unit-test-app. Kconfig options are added to allow disabling certain Unity features.
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
  Unit tests for FreeRTOS task priority get/set
 | 
						|
*/
 | 
						|
 | 
						|
#include <esp_types.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <strings.h>
 | 
						|
 | 
						|
#include "freertos/FreeRTOS.h"
 | 
						|
#include "freertos/task.h"
 | 
						|
#include "unity.h"
 | 
						|
#include "test_utils.h"
 | 
						|
 | 
						|
 | 
						|
static void counter_task(void *param)
 | 
						|
{
 | 
						|
    volatile uint32_t *counter = (volatile uint32_t *)param;
 | 
						|
    while (1) {
 | 
						|
        (*counter)++;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
TEST_CASE("Get/Set Priorities", "[freertos]")
 | 
						|
{
 | 
						|
    /* Two tasks per processor */
 | 
						|
    TaskHandle_t tasks[portNUM_PROCESSORS][2] = { 0 };
 | 
						|
    unsigned volatile counters[portNUM_PROCESSORS][2] = { 0 };
 | 
						|
 | 
						|
    TEST_ASSERT_EQUAL(UNITY_FREERTOS_PRIORITY, uxTaskPriorityGet(NULL));
 | 
						|
 | 
						|
    /* create a matrix of counter tasks on each core */
 | 
						|
    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
						|
        for (int task = 0; task < 2; task++) {
 | 
						|
            xTaskCreatePinnedToCore(counter_task, "count", 2048, (void *)&(counters[cpu][task]), UNITY_FREERTOS_PRIORITY - task, &(tasks[cpu][task]), cpu);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /* check they were created with the expected priorities */
 | 
						|
    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
						|
        for (int task = 0; task < 2; task++) {
 | 
						|
            TEST_ASSERT_EQUAL(UNITY_FREERTOS_PRIORITY - task, uxTaskPriorityGet(tasks[cpu][task]));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    vTaskDelay(10);
 | 
						|
 | 
						|
    /* at this point, only the higher priority tasks (first index) should be counting */
 | 
						|
    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
						|
        TEST_ASSERT_NOT_EQUAL(0, counters[cpu][0]);
 | 
						|
        TEST_ASSERT_EQUAL(0, counters[cpu][1]);
 | 
						|
    }
 | 
						|
 | 
						|
    /* swap priorities! */
 | 
						|
    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
						|
        vTaskPrioritySet(tasks[cpu][0], UNITY_FREERTOS_PRIORITY - 1);
 | 
						|
        vTaskPrioritySet(tasks[cpu][1], UNITY_FREERTOS_PRIORITY);
 | 
						|
    }
 | 
						|
 | 
						|
    /* check priorities have swapped... */
 | 
						|
    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
						|
        TEST_ASSERT_EQUAL(UNITY_FREERTOS_PRIORITY -1, uxTaskPriorityGet(tasks[cpu][0]));
 | 
						|
        TEST_ASSERT_EQUAL(UNITY_FREERTOS_PRIORITY, uxTaskPriorityGet(tasks[cpu][1]));
 | 
						|
    }
 | 
						|
 | 
						|
    /* check the tasks which are counting have also swapped now... */
 | 
						|
    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
						|
        unsigned old_counters[2];
 | 
						|
        old_counters[0] = counters[cpu][0];
 | 
						|
        old_counters[1] = counters[cpu][1];
 | 
						|
        vTaskDelay(10);
 | 
						|
        TEST_ASSERT_EQUAL(old_counters[0], counters[cpu][0]);
 | 
						|
        TEST_ASSERT_NOT_EQUAL(old_counters[1], counters[cpu][1]);
 | 
						|
    }
 | 
						|
 | 
						|
    /* clean up */
 | 
						|
    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
						|
        for (int task = 0; task < 2; task++) {
 | 
						|
            vTaskDelete(tasks[cpu][task]);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |