Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f4xx.h" // Device header
- #include "FreeRTOS.h" // ARM.FreeRTOS::RTOS:Core
- #include "FreeRTOSConfig.h" // ARM.FreeRTOS::RTOS:Config
- #include "Task.h"
- #include "queue.h"
- #include "semphr.h"
- SemaphoreHandle_t Semaphore = NULL;
- TickType_t WakeTime1 = NULL;
- TickType_t WakeTime2 = NULL;
- TaskHandle_t BlinkTaskHandle = NULL;
- TaskHandle_t SOSTaskHandle = NULL;
- void vBlinkTask(void* pvParams)
- {
- TickType_t WakeTime1 = xTaskGetTickCount();
- while(1)
- {
- if(Semaphore != NULL)
- {
- if((xSemaphoreTake(Semaphore,10) == pdTRUE) || (xSemaphoreGetMutexHolder(Semaphore) == BlinkTaskHandle))
- {
- for(char i=0; i<4; i++)
- {
- GPIOA->ODR |= GPIO_ODR_ODR_5;
- vTaskDelay(pdMS_TO_TICKS(500));
- GPIOA->ODR &= ~GPIO_ODR_ODR_5;
- vTaskDelay(pdMS_TO_TICKS(500));
- }
- xSemaphoreGive(Semaphore);
- vTaskDelayUntil(&WakeTime1, pdMS_TO_TICKS(8000));
- }
- else taskYIELD();
- }
- }
- }
- void vSOSTask(void* pvParams)
- {
- TickType_t WakeTime2 = xTaskGetTickCount();
- while(1)
- {
- if(Semaphore != NULL)
- {
- if((xSemaphoreTake(Semaphore,10) == pdTRUE) || ( xSemaphoreGetMutexHolder(Semaphore) == SOSTaskHandle))
- {
- for( char i=0; i<3; i++ )
- {
- GPIOA->ODR |= GPIO_ODR_ODR_6;
- vTaskDelay(pdMS_TO_TICKS(150));
- GPIOA->ODR &= ~GPIO_ODR_ODR_6;
- vTaskDelay(pdMS_TO_TICKS(150));
- }
- for( char i=0; i<3; i++ )
- {
- GPIOA->ODR |= GPIO_ODR_ODR_6;
- vTaskDelay(pdMS_TO_TICKS(400));
- GPIOA->ODR &= ~GPIO_ODR_ODR_6;
- vTaskDelay(pdMS_TO_TICKS(400));
- }
- for( char i=0; i<3; i++ )
- {
- GPIOA->ODR |= GPIO_ODR_ODR_6;
- vTaskDelay(pdMS_TO_TICKS(150));
- GPIOA->ODR &= ~GPIO_ODR_ODR_6;
- vTaskDelay(pdMS_TO_TICKS(150));
- }
- xSemaphoreGive(Semaphore);
- vTaskDelayUntil(&WakeTime2, pdMS_TO_TICKS(8000));
- }
- else taskYIELD();
- }
- }
- }
- int main(void)
- {
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
- GPIOA->MODER |= GPIO_MODER_MODER5_0 | GPIO_MODER_MODER6_0;
- xTaskCreate(vBlinkTask, "BlinkingDiode", configMINIMAL_STACK_SIZE, NULL, 1, &BlinkTaskHandle);
- xTaskCreate(vSOSTask, "SOSDiode", configMINIMAL_STACK_SIZE, NULL, 1, &SOSTaskHandle);
- Semaphore = xSemaphoreCreateMutex();
- vTaskStartScheduler();
- while(1)
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement