hendriawan

priority-inversion

Feb 8th, 2024
1,735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.63 KB | None | 0 0
  1. #include "main.h"
  2. #include <stdio.h>
  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. #include "timers.h"
  6. #include "queue.h"
  7. #include "semphr.h"
  8. #include "event_groups.h"
  9. #include "stdlib.h"
  10. #include "string.h"
  11. #include "hardwareinit.h"
  12.  
  13. extern UART_HandleTypeDef huart2;
  14. SemaphoreHandle_t SimpleMutex;
  15. SemaphoreHandle_t BinSemaphore;
  16.  
  17. TaskHandle_t HPT_Handler;
  18. TaskHandle_t MPT_Handler;
  19. TaskHandle_t LPT_Handler;
  20.  
  21. void HPT_Task (void *argument);
  22. void MPT_Task (void *argument);
  23. void LPT_Task (void *argument);
  24.  
  25. void Send_Uart (uint8_t *str)
  26. {
  27.     xSemaphoreTake(BinSemaphore, portMAX_DELAY);
  28.     HAL_Delay(5000);
  29.     HAL_UART_Transmit(&huart2, str, strlen (str), HAL_MAX_DELAY);
  30.     xSemaphoreGive(BinSemaphore);
  31. }
  32.  
  33. void HPT_Task (void *argument)
  34. {
  35.     uint8_t *strtosend = "IN HPT===========================\n";
  36.     while (1)
  37.     {
  38.         char *str = "Entered HPT and About to take Semaphore\n";
  39.         HAL_UART_Transmit(&huart2, str, strlen (str), HAL_MAX_DELAY);
  40.  
  41.         Send_Uart(strtosend);
  42.  
  43.         char *str2 = "Leaving HPT\n\n";
  44.         HAL_UART_Transmit(&huart2, str2, strlen (str2), HAL_MAX_DELAY);
  45.  
  46.         vTaskDelay(750);
  47.     }
  48. }
  49.  
  50.  
  51. void MPT_Task (void *argument)
  52. {
  53.     while (1)
  54.     {
  55.         char *str = "IN MPT****************************\n\n";
  56.         HAL_UART_Transmit(&huart2, str, strlen (str), HAL_MAX_DELAY);
  57.         vTaskDelay(2000);
  58.     }
  59. }
  60.  
  61. void LPT_Task (void *argument)
  62. {
  63.     uint8_t *strtosend = "IN LPT...........................\n";
  64.     while (1)
  65.     {
  66.         char *str = "Entered LPT and About to take Semaphore\n";
  67.         HAL_UART_Transmit(&huart2, str, strlen (str), HAL_MAX_DELAY);
  68.  
  69.         Send_Uart(strtosend);
  70.  
  71.         char *str2 = "Leaving LPT\n\n";
  72.         HAL_UART_Transmit(&huart2, str2, strlen (str2), HAL_MAX_DELAY);
  73.  
  74.         vTaskDelay(1000);
  75.     }
  76. }
  77.  
  78. int main(void)
  79. {
  80.   HAL_Init();
  81.   SystemClock_Config();
  82.   /* Initialize all configured peripherals */
  83.   MX_GPIO_Init();
  84.   MX_USART2_UART_Init();
  85.   MX_I2C1_Init();
  86.   MX_SPI1_Init();
  87.   MX_USB_OTG_FS_PCD_Init();
  88.   /* USER CODE BEGIN 2 *************************** */
  89.   SimpleMutex = xSemaphoreCreateMutex();
  90.  
  91.     if (SimpleMutex != NULL)
  92.     {
  93.       HAL_UART_Transmit(&huart2, "Mutex Created\n\n", 15, 1000);
  94.     }
  95.  
  96.     BinSemaphore = xSemaphoreCreateBinary();
  97.     if (BinSemaphore != NULL)
  98.     {
  99.       HAL_UART_Transmit(&huart2, "Semaphore Created\n\n", 19, 1000);
  100.     }
  101.  
  102.     xSemaphoreGive(BinSemaphore);
  103.  
  104.     /// create tasks
  105.  
  106.     xTaskCreate(HPT_Task, "HPT", 128, NULL, 3, &HPT_Handler);
  107.     xTaskCreate(MPT_Task, "MPT", 128, NULL, 2, &MPT_Handler);
  108.     xTaskCreate(LPT_Task, "LPT", 128, NULL, 1, &LPT_Handler);
  109.  
  110.     vTaskStartScheduler();
  111.  
  112.   /* END USER CODE 2 ********************************/
  113.   while (1) {
  114.  
  115.   }
  116.  
  117. }
  118.  
Advertisement