---
tags: ele-21
---
# Relatório da Aula 4 - Laboratório de EEA-27 2020
Alunos:
- Lucas Barioni Toma
- Michel Marcos Sena Farias
Consulte o material e livros do FreeRTOS (disponibilizado na pasta Referências) e material das aulas.
- 1.Introduza a tarefa "conta_k" que deve apresentar ciclicamente a contagem de segundos de tempo, em decimal, de 0 a 99, em dois displays de sete segmentos conectados ao PORTK do ATmega2560. Apresente a criação do manipulador da tarefa, o protótipo da função tarefa, a criação da tarefa dentro da função main e a tarefa "conta_k".
Minhas Tarefas.c
```c
...
#define SECOND 1000
...
// Task Prototypes
void conta_k(void *pvParameters);
...
// Task Handlers
extern xTaskHandle conta_k_handler;
...
// Tasks
void conta_k(void *pvParameters) {
portTickType xLastWakeTime;
xLastWakeTime = xTaskGetTickCount();
DDRK = 0xFF; // PORTK as output
int counter = 0;
for (;;) {
if (counter < 100) {
PORTK = counter;
counter++;
} else {
counter = 0;
}
vTaskDelayUntil(&xLastWakeTime, SECOND/portTICK_RATE_MS);
}
}
...
```
Parte Principal.c
```c
...
// Task Prototypes
void conta_k(void *pvParameters);
...
// Task Handlers
xTaskHandle conta_k_handler;
...
int main(void) {
...
xTaskCreate(
conta_k, // Task
"Conta K", // Debug name
1000, // Stack depth
NULL, // Parameters
1, // Priority
&conta_k_handler // Handler
);
...
vTaskStartScheduler();
}
...
```
- 2. Introduza a tarefa "mensagem_usart1" que deve imprimir na USART1 a mensagem “transcorridos 10 segundos”, de 10 em dez segundos. Apresente a criação do manipulador da tarefa, o protótipo da função tarefa, a criação da tarefa dentro da função main e a tarefa " mensagem_usart1".
Minhas Tarefas.c
```c
...
char message[26] = "transcorridos 10 segundos";
extern FILE usart1_str;
...
// task prototypes
void mensagem_usart1(void *pvParameters);
...
// task handlers
extern xTaskHandle mensagem_usart1_handler;
...
// tasks
void mensagem_usart1(void *pvParameters) {
portTickType xLastWakeTime;
xLastWakeTime = xTaskGetTickCount();
for (;;) {
vTaskDelayUntil(&xLastWakeTime, 10*SECOND/portTICK_RATE_MS);
fprintf(usart1_str, "%s", message);
}
}
...
```
Parte Principal.c
```c
...
int USART1SendByte(char u8Data, FILE *stream);
int USART1ReceiveByte(FILE *stream);
void USART1Init(void);
FILE usart1_str = FDEV_SETUP_STREAM(
USART1SendByte,
USART1ReceiveByte,
_FDEV_SETUP_RW
);
...
// task prototypes
void mensagem_usart1(void *pvParameters);
...
// task handlers
xTaskHandle mensagem_usart1_handler;
...
int main(void) {
...
USART1Init();
xTaskCreate(
mensagem_usart1, // Task
"Mensagem USART 1", // Debug Name
1000, // Stack depth
NULL, // Parameters
1, // Priority
&mensagem_usart1_handler // Handler
);
...
vTaskStartScheduler();
}
...
```