ShawnHymel / introduction-to-rtos

513 stars 124 forks source link

suspended task deletion program stops and does not switch to another task #4

Open rohank27696 opened 3 years ago

rohank27696 commented 3 years ago

Board = ESP32 version = 1.0.6

CODE

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if CONFIG_FREERTOS_UNICORE

static const BaseType_t app_cpu = 0 ;

else

static const BaseType_t app_cpu = 1;

endif

//const char msg[] = "qwerty is aqsws"; //STATEMENT - 1 const char msg[] = "qwqwmqkqkw kkwmdkwdksd ksmdksmdks ksmdksmd"; //STATEMENT - 2 //static const int led_pin = 2;

//TAsk Handlers static TaskHandle_t task_1 = NULL; static TaskHandle_t task_2 = NULL;

void startTask1( void *parameters) { int msg_len = strlen(msg);

while(1) { Serial.println(); for(int i =0 ; i < msg_len ;i++) { Serial.print(msg[i]); } Serial.println(); vTaskDelay(1000 / portTICK_PERIOD_MS); } }

void startTask2( void *parameters) {

while(1) { Serial.print('*'); vTaskDelay(100 / portTICK_PERIOD_MS); } }

void setup() { // put your setup code here, to run once: // pinMode( led_pin ,OUTPUT ); Serial.begin(300);

vTaskDelay(1000 / portTICK_PERIOD_MS);

Serial.println("----FREE RTOS DEMO ----");

Serial.println("setup and loop task running on core "); Serial.print(xPortGetCoreID()); Serial.print(" with priority "); Serial.println(uxTaskPriorityGet(NULL));

//task to run forever xTaskCreatePinnedToCore( //USE xTaskCreate() in vanilla FreeRTOS startTask1, //Function to be called "Task 1", //NAME of Task 1024, //Stack Size ( bytes in esp32 ,words in vanilla) NULL, //Parameters to pass to function, 1, //Task priority ( 0 to configMAX_priorites(25 for esp32 ) -1 i.e 0 to 24) &task_1, //parameters to pass to functions app_cpu); //Run on One Core for demo purpose

xTaskCreatePinnedToCore( //USE xTaskCreate() in vanilla FreeRTOS startTask2, //Function to be called "Task 2", //NAME of Task 1024, //Stack Size ( bytes in esp32 ,words in vanilla) NULL, //Parameters to pass to function, 2, //Task priority ( 0 to configMAX_priorites(25 for esp32 ) -1 i.e 0 to 24) &task_2, //parameters to pass to functions app_cpu); //Run on One Core for demo purpose }

void loop() { // put your main code here, to run repeatedly:

for( int i = 0 ; i < 3 ; i++ ) { vTaskSuspend(task_2); vTaskDelay(2000 / portTICK_PERIOD_MS); vTaskResume(task_2); vTaskDelay(2000 / portTICK_PERIOD_MS);

}

if( task_1 != NULL ){ vTaskDelete(task_1); task_1 =NULL; }

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Problem : when statement 1 is selected program run smoothly i.e task 2 keeps printing "*" continously after deletion of task 1, but if statement 2 is selected program gets stuck . whats happens if suspended task is deleted in free rtos? STATEMENT1 STATEMENT2