Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Includes */
- #include "stm32f4xx.h"
- #include "stm32f4_discovery.h"
- #include "FreeRTOS.h"
- #include "task.h"
- #include "semphr.h"
- xSemaphoreHandle xBinarySemaphore;
- xTaskHandle xBlinkLed;
- xTaskHandle xBlinkLed1;
- static void vBlinkLed1(void *pvParameters);
- static void vEXTI0_IRQHandler(void *pvParameters);
- static void vBlinkLed( void *pvParameters );
- int main(void)
- {
- /* Initialize LEDs */
- STM_EVAL_LEDInit(LED3);
- STM_EVAL_LEDInit(LED4);
- STM_EVAL_LEDInit(LED5);
- STM_EVAL_LEDInit(LED6);
- STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI);
- vSemaphoreCreateBinary( xBinarySemaphore );
- xSemaphoreTake( xBinarySemaphore, portMAX_DELAY);
- if( xBinarySemaphore != NULL )
- {
- xTaskCreate( vBlinkLed, ( signed char * ) "vBlinkLed", configMINIMAL_STACK_SIZE, NULL, 4, &xBlinkLed );
- xTaskCreate( vEXTI0_IRQHandler, ( signed char * ) "vEXTI0_IRQHandler", configMINIMAL_STACK_SIZE, NULL, 4, NULL );
- vTaskStartScheduler();
- }
- return 0;
- }
- void vBlinkLed1(void *pvParameters) {
- unsigned short i = 0;
- struct smb380_acc_t acc;
- portTickType xLastWakeTime;
- xLastWakeTime = xTaskGetTickCount();
- for (;;) {
- STM_EVAL_LEDOn(LED3);
- vTaskDelayUntil( &xLastWakeTime, ( 100 / portTICK_RATE_MS ) );
- STM_EVAL_LEDOff(LED3);
- }
- }
- void vBlinkLed( void *pvParameters )
- {
- for(;;)
- {
- STM_EVAL_LEDToggle(LED3);
- STM_EVAL_LEDToggle(LED4);
- STM_EVAL_LEDToggle(LED5);
- STM_EVAL_LEDToggle(LED6);
- vTaskDelay(1000 / portTICK_RATE_MS);
- }
- }
- void vEXTI0_IRQHandler( void *pvParameters )
- {
- static int cr = 0;
- for ( ;; )
- {
- xSemaphoreTake( xBinarySemaphore, portMAX_DELAY );
- {
- STM_EVAL_LEDOff(LED3);
- STM_EVAL_LEDOff(LED4);
- STM_EVAL_LEDOff(LED5);
- STM_EVAL_LEDOff(LED6);
- if (cr == 0)
- {
- vTaskDelete(xBlinkLed);
- xTaskCreate( vBlinkLed1, ( signed char * ) "vBlinkLed1", configMINIMAL_STACK_SIZE, NULL, 4, &xBlinkLed1);
- cr = 1;
- }
- else
- {
- xTaskCreate( vBlinkLed, ( signed char * ) "vBlinkLed", configMINIMAL_STACK_SIZE, NULL, 4, &xBlinkLed );
- vTaskDelete(xBlinkLed1);
- cr = 0;
- }
- }
- }
- }
- void EXTI0_IRQHandler(void)
- {
- if(EXTI_GetITStatus(EXTI_Line0) != RESET)
- {
- static portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
- EXTI_ClearITPendingBit(EXTI_Line0);
- xHigherPriorityTaskWoken = pdFALSE;
- xSemaphoreGiveFromISR( xBinarySemaphore, &xHigherPriorityTaskWoken );
- portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement