#include "main.h" #include #include "FreeRTOS.h" #include "task.h" #include "timers.h" #include "queue.h" #include "semphr.h" #include "event_groups.h" #include "stdlib.h" #include "string.h" #include "hardwareinit.h" extern UART_HandleTypeDef huart2; SemaphoreHandle_t SimpleMutex; SemaphoreHandle_t BinSemaphore; TaskHandle_t HPT_Handler; TaskHandle_t MPT_Handler; TaskHandle_t LPT_Handler; void HPT_Task (void *argument); void MPT_Task (void *argument); void LPT_Task (void *argument); //void Send_Uart (uint8_t *str) //{ // xSemaphoreTake(BinSemaphore, portMAX_DELAY); // HAL_Delay(5000); // HAL_UART_Transmit(&huart2, str, strlen (str), HAL_MAX_DELAY); // xSemaphoreGive(BinSemaphore); //} void Send_Uart (uint8_t *str) { xSemaphoreTake(SimpleMutex, portMAX_DELAY); HAL_Delay(5000); HAL_UART_Transmit(&huart2, str, strlen (str), HAL_MAX_DELAY); xSemaphoreGive(SimpleMutex); } void HPT_Task (void *argument) { uint8_t *strtosend = "IN HPT===========================\n"; while (1) { char *str = "Entered HPT and About to take Semaphore\n"; HAL_UART_Transmit(&huart2, str, strlen (str), HAL_MAX_DELAY); Send_Uart(strtosend); char *str2 = "Leaving HPT\n\n"; HAL_UART_Transmit(&huart2, str2, strlen (str2), HAL_MAX_DELAY); vTaskDelay(750); } } void MPT_Task (void *argument) { while (1) { char *str = "IN MPT****************************\n\n"; HAL_UART_Transmit(&huart2, str, strlen (str), HAL_MAX_DELAY); vTaskDelay(2000); } } void LPT_Task (void *argument) { uint8_t *strtosend = "IN LPT...........................\n"; while (1) { char *str = "Entered LPT and About to take Semaphore\n"; HAL_UART_Transmit(&huart2, str, strlen (str), HAL_MAX_DELAY); Send_Uart(strtosend); char *str2 = "Leaving LPT\n\n"; HAL_UART_Transmit(&huart2, str2, strlen (str2), HAL_MAX_DELAY); vTaskDelay(1000); } } int main(void) { HAL_Init(); SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); MX_I2C1_Init(); MX_SPI1_Init(); MX_USB_OTG_FS_PCD_Init(); /* USER CODE BEGIN 2 *************************** */ SimpleMutex = xSemaphoreCreateMutex(); if (SimpleMutex != NULL) { HAL_UART_Transmit(&huart2, "Mutex Created\n\n", 15, 1000); } BinSemaphore = xSemaphoreCreateBinary(); if (BinSemaphore != NULL) { HAL_UART_Transmit(&huart2, "Semaphore Created\n\n", 19, 1000); } xSemaphoreGive(BinSemaphore); /// create tasks xTaskCreate(HPT_Task, "HPT", 128, NULL, 3, &HPT_Handler); xTaskCreate(MPT_Task, "MPT", 128, NULL, 2, &MPT_Handler); xTaskCreate(LPT_Task, "LPT", 128, NULL, 1, &LPT_Handler); vTaskStartScheduler(); /* END USER CODE 2 ********************************/ while (1) { } }