2014-09-01 79 views
1

我正在使用帶有Codewarrior 10.6軟件的Freescale FRDM-KL25Z板。我的目標是在FreeRTOS中製作一個小程序,它通過模擬/數字轉換器(0-3,3v)從熱敏電阻讀取電壓,並取決於這個電壓,我想打開/關閉LED二極管。它一直工作到現在,當時我添加了第二項任務和隊列。我認爲這個問題可能是堆棧大小,但我不知道如何配置它。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); 
} 

代碼在main():

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

您應該創建隊列,然後檢查返回值不爲零(成功創建隊列)