Guest User

Untitled

a guest
Sep 25th, 2012
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. /* Includes */
  2. #include "stm32f4xx.h"
  3. #include "stm32f4_discovery.h"
  4. #include "FreeRTOS.h"
  5. #include "task.h"
  6. #include "semphr.h"
  7.  
  8. xSemaphoreHandle xBinarySemaphore;
  9. xTaskHandle xBlinkLed;
  10. xTaskHandle xBlinkLed1;
  11.  
  12. static void vBlinkLed1(void *pvParameters);
  13. static void vEXTI0_IRQHandler(void *pvParameters);
  14. static void vBlinkLed( void *pvParameters );
  15.  
  16. int main(void)
  17. {
  18.  
  19. /* Initialize LEDs */
  20. STM_EVAL_LEDInit(LED3);
  21. STM_EVAL_LEDInit(LED4);
  22. STM_EVAL_LEDInit(LED5);
  23. STM_EVAL_LEDInit(LED6);
  24.  
  25. STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI);
  26.  
  27. vSemaphoreCreateBinary( xBinarySemaphore );
  28. xSemaphoreTake( xBinarySemaphore, portMAX_DELAY);
  29.  
  30. if( xBinarySemaphore != NULL )
  31. {
  32. xTaskCreate( vBlinkLed, ( signed char * ) "vBlinkLed", configMINIMAL_STACK_SIZE, NULL, 4, &xBlinkLed );
  33. xTaskCreate( vEXTI0_IRQHandler, ( signed char * ) "vEXTI0_IRQHandler", configMINIMAL_STACK_SIZE, NULL, 4, NULL );
  34. vTaskStartScheduler();
  35. }
  36. return 0;
  37. }
  38.  
  39. void vBlinkLed1(void *pvParameters) {
  40. unsigned short i = 0;
  41. struct smb380_acc_t acc;
  42. portTickType xLastWakeTime;
  43. xLastWakeTime = xTaskGetTickCount();
  44. for (;;) {
  45. STM_EVAL_LEDOn(LED3);
  46. vTaskDelayUntil( &xLastWakeTime, ( 100 / portTICK_RATE_MS ) );
  47. STM_EVAL_LEDOff(LED3);
  48. }
  49. }
  50.  
  51. void vBlinkLed( void *pvParameters )
  52. {
  53. for(;;)
  54. {
  55. STM_EVAL_LEDToggle(LED3);
  56. STM_EVAL_LEDToggle(LED4);
  57. STM_EVAL_LEDToggle(LED5);
  58. STM_EVAL_LEDToggle(LED6);
  59. vTaskDelay(1000 / portTICK_RATE_MS);
  60. }
  61. }
  62.  
  63. void vEXTI0_IRQHandler( void *pvParameters )
  64. {
  65. static int cr = 0;
  66. for ( ;; )
  67. {
  68. xSemaphoreTake( xBinarySemaphore, portMAX_DELAY );
  69. {
  70. STM_EVAL_LEDOff(LED3);
  71. STM_EVAL_LEDOff(LED4);
  72. STM_EVAL_LEDOff(LED5);
  73. STM_EVAL_LEDOff(LED6);
  74. if (cr == 0)
  75. {
  76. vTaskDelete(xBlinkLed);
  77. xTaskCreate( vBlinkLed1, ( signed char * ) "vBlinkLed1", configMINIMAL_STACK_SIZE, NULL, 4, &xBlinkLed1);
  78. cr = 1;
  79. }
  80. else
  81. {
  82. xTaskCreate( vBlinkLed, ( signed char * ) "vBlinkLed", configMINIMAL_STACK_SIZE, NULL, 4, &xBlinkLed );
  83. vTaskDelete(xBlinkLed1);
  84. cr = 0;
  85. }
  86. }
  87. }
  88. }
  89.  
  90. void EXTI0_IRQHandler(void)
  91. {
  92. if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  93. {
  94. static portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
  95. EXTI_ClearITPendingBit(EXTI_Line0);
  96. xHigherPriorityTaskWoken = pdFALSE;
  97. xSemaphoreGiveFromISR( xBinarySemaphore, &xHigherPriorityTaskWoken );
  98. portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
  99. }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment