代码:
- #include "FreeRTOS.h"
- #include "semphr.h"
- #include "task.h"
- #include "LEDBlinkV1.h"
- #include "cfg.h"
- #include "macromcu.h"
- #define LONG_TIME 0xffff
- xSemaphoreHandle xSemaphore;
- void vTask1( void * pvParameters )
- {
- const portTickType xDelay = 500 / portTICK_RATE_MS;
- // 创建信号
- vSemaphoreCreateBinary( xSemaphore );
- for( ;; )
- {
- //vTaskDelay( xDelay )
- _delay_ms(500);
- PININV(LED1);
- //BUTTON按下时,发出信号
- if(( xSemaphore != NULL ) && (PININ(BUTTON) == 0))
- {
- PININV(LED3);
- xSemaphoreGive( xSemaphore );
- }
- }
- }
- void vTask2( void * pvParameters )
- {
- for( ;; )
- {
- //收到信号后LED2闪
- if( xSemaphoreTake( xSemaphore, LONG_TIME ) == pdTRUE )
- {
- PININV(LED2);
- PININV(LED4);
- }
- taskYIELD();
- }
- }
- int main()
- {
- PINDIR(LED1, PIN_OUTPUT);
- PINDIR(LED2, PIN_OUTPUT);
- PINDIR(LED3, PIN_OUTPUT);
- PINDIR(LED4, PIN_OUTPUT);
- PINSET(LED2);
- PINDIR(BUTTON, PIN_INPUT);
- PINSET(BUTTON);
- xTaskCreate( vTask1, "TASK1", configMINIMAL_STACK_SIZE, NULL, 1, NULL );
- xTaskCreate( vTask2, "TASK2", configMINIMAL_STACK_SIZE, NULL, 1, NULL );
- vTaskStartScheduler();
- while(1);
- return 0;
- }
- #ifndef configUSE_COUNTING_SEMAPHORES
- #define configUSE_COUNTING_SEMAPHORES 1
- #endif
用proteus仿真,收不到消息。请问高手,哪里有错误?谢谢!
|