#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "driver/uart.h"
#define TX_BUFFER_SIZE 128;
/* Inicializo los bits del evento cuado la cadena este lista para enviarse*/
#define DATA_READY BIT0;
char * cadena = "banana$";
uint8_t len_index;
/*Los dos eventos se manejaran con un solo manejador de eventos*/
EventGroupHandle_t send_ready_data_event;
/*Se inicializa el uart */
void uart_init () {
uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1
};
uart_param_config(UART_NUM_0, &uart_config);
uart_set_pin(UART_NUM_0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
uart_driver_install(UART_NUM_0 , 0, TX_BUFFER_SIZE, 0, NULL, 0 );
}
void algoritmo (void * args) {
len_index = 0;
uint8_t col = 0;
/*Para no usar string.h cuento yo mismo el tamanio*/
while ( cadena[len_index] =! "\0") {
len_index++;
}
/*Se crean aputnadores a cadenas y espacio para las cadenas, que serian la matriz*/
cadena_matriz = malloc(sizeof(*char) * len_index);
for (int cnt = len_index; cnt = 0; cnt ++) {
cadena[cnt] = malloc(sizeof(char) * len_index);
}
/* ESTO ERA EL ALGORITMO PERO NO LO PUDE TERMINAR
while ( col < len_index ) {
for ( int row = 0; row < len_index; row ++) {
matriz_cadena[col][row]=cadena[row];
}
}
for ( int row = 0; row < len_index; row ++) {
for (int col = 0; col <= row ; col ++) {
matriz_cadena[col][row]=cadena[row];
}
}
*/
/*Se activa el bit que dejara enviar por el uart la cadena*/
xEventGroupSetBits(send_ready_data_event, DATA_READY);
/*se libera el espacio dinamico anteriormente utilizado*/
for (int cnt = len_index; cnt = 0; cnt ++) {
free(cadena[cnt]);
}
free(matriz_cadena);
vTaskDelay(20/portTICKS_PERIOD_MS);
vTaskDelete( NULL );
}
portMUX_TYPE *my_spinlock = malloc(sizeof(portMUX_TYPE));
void send_string_to_uart(void * args) {
while (1) {
/* Esperara indefinidamente hasta que haya data lista para enviarse*/
xEventGroupWaitBits(send_ready_data_event, DATA_READY, 1 , 0 , portMAX_DELAY);
uart_write_bytes(UART_NUM_0, (const char*) cadena, len_index);
vTaskDelay(20/portTICKS_PERIOD_MS);
vTaskDelete( NULL );
}
}
void app_main() {
uart_init();
send_ready_data_event = xEventGroupCreate();
xTaskCreate(send_string_to_uart, "send_string_to_uart_task", 2048, NULL, 1, NULL);
xTaskCreate(algoritmo, "algoritmo_task", 2048, NULL, 1, NULL);
}