2014-09-01 2 views
1

저는 Codewarrior 10.6 소프트웨어가있는 Freescale FRDM-KL25Z 보드를 사용하고 있습니다. 내 목표는 아날로그/디지털 컨버터 (0-3,3V)에 의해 서미스터에서 전압을 읽고 내가 켜기/끄기 LED 다이오드를 켜고 싶습니다이 전압에 따라 FreeRTOS에서 작은 프로그램을 만드는 것입니다. 두 번째 작업과 대기열을 추가 할 때까지 그것은 나를 위해 일했습니다. 나는 그 문제가 스택 크기에 있을지도 모른다고 생각하고있다. 그러나 나는 그것을 어떻게 구성해야할지 모른다.FreeRTOS의 대기열

코드는 다음과 같습니다 :에

xQueueHandle queue_led; 


void TaskLed (void *p) 

{ 

uint16_t temp_val; 

    xQueueReceive(queue_led, &temp_val, 1); 

    if (temp_val<60000) 
    { 
     LED_1_Neg();   
    } 
} 

void TaskTemp (void *p) 
{ 

    uint16_t temp_val; 

    (void)AD1_Measure(TRUE); 
    (void)AD1_GetValue16(&temp_val); 

    xQueueSendToBack(queue_led, &temp_val, 1000); 

    FRTOS1_vTaskDelay(1000); 
} 

코드) (주 :

xTaskCreate(TaskLed, (signed char *)"tl", 200, NULL, 1, NULL); 
    xTaskCreate(TaskTemp, (signed char *)"tt", 200, NULL, 1, NULL); 
    vTaskStartScheduler(); 
    return(0); 

답변

2

작업은 일반적으로 실행의 연속 스레드 - 즉 - 그것은 실행 무한 루프로 구현됩니다 영원히. 태스크가 루프를 빠져 나가는 것은 매우 드문 일이며, FreeRTOS에서는 태스크를 삭제하지 않고 태스크를 구현하는 함수의 맨 아래에서 실행할 수 없습니다. FreeRTOS의 최신 버전에서는 시도 할 경우 어설 션을 트리거합니다. 따라서 작업을 구현하는 함수가 유효하지 않습니다.

FreeRTOS는 훌륭한 문서 (이 문제를 게시하기에 더 적합한 장소 인 우수한 지원 포럼)를 제공합니다. 여기에 작업을 작성하는 방법을 알 수 있습니다. http://www.freertos.org/implementing-a-FreeRTOS-task.html

게시하는 코드에서 사용하려고하는 대기열을 만들고있는 것을 볼 수 없습니다. 그것도 FreeRTOS.org 웹 사이트에 기록되어 있으며 다운로드에는 수백 가지 예제가 있습니다. 이 스택 문제가 있다면

다음, 구글은 여기에 보여줄 것입니다 : http://www.freertos.org/Stacks-and-stack-overflow-checking.html

0

당신은 큐를 만든 다음 반환 된 값 (큐가 성공적으로 생성)

0이 아닌 것을 확인해야