hendriawan icon

priority-inversion

hendriawan | PRO | 02/08/24 09:07:07 PM UTC | 0 ⭐ | 13664 👁️ | Never ⏰ | []
C |

2.63 KB

|

None

|

0 👍

/

0 👎

#include "main.h"
#include <stdio.h>
#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 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) {
 
  }
 
}
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎