Está en la página 1de 5

Instituto Tecnológico de Estudios Superiores de

Monterrey
TE2003B.501

Diseño de Sistemas en Chip

Módulo 3. Actividad 1. Tarea Suspendida.

Gpo 101

Profesor:

David Antonio Torres

Alumno:

Daniela Berenice Hernández de Vicente A01735346

Fecha: 24 de Mayo del 2022


Código:
include <Arduino_FreeRTOS.h>

#define F_CPU 16000000UL


#define USART_BAUDRATE 19200
#define UBRR_VALUE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)

//variables del profiles


typedef int TaskProfiler;
TaskProfiler TASK1Profiler, TASK2Profiler, TASK3Profiler;

//buffer para el UART


unsigned char mybuffer[25];

//handle para Tarea2


TaskHandle_t vTaskHandle2; //Se ocupa para

void setup()
{
//creación de tareas
xTaskCreate(vTaskProfiler1,"PROFILER1 TASK",100,NULL,1,NULL);
xTaskCreate(vTaskProfiler2,"PROFILER2 TASK",100,NULL,1,&vTaskHandle2);
xTaskCreate(vTaskProfiler3,"PROFILER3 TASK",100,NULL,1,NULL);

//configuración del puerto serial


UBRR0H = (uint8_t)(UBRR_VALUE >> 8);
UBRR0L = (uint8_t)UBRR_VALUE;
UCSR0C = 0x06; // Set frame format: 8data, 1stop bit
UCSR0B |= (1 << RXEN0) | (1 << TXEN0); // TX y RX habilitados
}

void vTaskProfiler1(void * pvParameters)


{

while(1)
{
//se actualiza profiler, se imprime y se bloquea tarea
TASK1Profiler++;
sprintf(mybuffer, "\nTask1 Profiler: %d", TASK1Profiler);
USART_Transmit_String((unsigned char *)mybuffer);
//incrementa prioridad de tarea 2
vTaskDelay(1000/portTICK_PERIOD_MS);
if(TASK1Profiler == 10) {
vTaskPrioritySet(vTaskHandle2, 2); //Cambiar prioridades a las tareas
//Añadir función vTaskSuspend
vTaskSuspend(vTaskHandle2);
//Mensaje
unsigned char suspension[25];
sprintf(suspension, "\nSe suspendio la TAREA 2");
USART_Transmit_String((unsigned char *)suspension);
}
}
}

void vTaskProfiler2(void * pvParameters)


{

while(1)
{
//se actualiza profiler, se imprime y se bloquea tarea
TASK2Profiler++;
sprintf(mybuffer, "\nTask2 Profiler: %d", TASK2Profiler);
USART_Transmit_String((unsigned char *)mybuffer);
vTaskDelay(900/portTICK_PERIOD_MS);
}
}

void vTaskProfiler3(void * pvParameters)


{

while(1)
{
//se actualiza profiler, se imprime y se bloquea tarea
TASK3Profiler++;
sprintf(mybuffer, "\nTask3 Profiler: %d", TASK3Profiler);
USART_Transmit_String((unsigned char *)mybuffer);
//Añadir el if de la Task1
//Añadir función vTaskResume y Mensaje
vTaskDelay(900/portTICK_PERIOD_MS);
if(TASK3Profiler == 20) {
vTaskPrioritySet(vTaskHandle2, 2); //Cambiar prioridades a las tareas
//Añadir función vTaskSuspend
vTaskResume(vTaskHandle2);
//Mensaje
unsigned char otra[25];
sprintf(otra, "\nSe reanudo la TAREA 2");
USART_Transmit_String((unsigned char *)otra);
}
}
}

//////////funciones de transmisión del UART///////////////

void USART_Transmit(unsigned char data)


{
//wait for empty transmit buffer
while(!(UCSR0A & (1 << UDRE0)));

//put data into buffer, send data


UDR0 = data;
}

void USART_Transmit_String(unsigned char * pdata)


{
unsigned char i;
//calculate string length
unsigned char len = strlen(pdata);

//transmit byte for byte


for(i=0; i < len; i++)
{
//wait for empty transmit buffer
while(!(UCSR0A & (1 << UDRE0)));
//put data into buffer, send data
UDR0 = pdata[i];
}
}
//////////////////////////////////////////////////////////////
void loop() { }

Resultados:
https://youtu.be/nNqyZ-h9Neo

También podría gustarte