我正在尋找一個示例,介紹任務之間傳遞數據的正確方法:freeRTOS:如何在任務之間傳遞數據?
可以說我有一個顯示器,鍵盤和一些傳感器,例如。內部ADC。 我想在顯示屏上顯示所有傳感器的值。按下按鈕後,更改視圖並顯示一些文本。按下另一個後,返回值。
我會使用全局變量,但它無處不描述爲一個壞主意。在另一方面,如果我使用隊列(xQueueCreate,xQueueReceive,xQueueSend),我不會有所有的數據,以顯示它,我認爲,他們接受剛剛失去記憶之後創建副本。
我正在尋找一個示例,介紹任務之間傳遞數據的正確方法:freeRTOS:如何在任務之間傳遞數據?
可以說我有一個顯示器,鍵盤和一些傳感器,例如。內部ADC。 我想在顯示屏上顯示所有傳感器的值。按下按鈕後,更改視圖並顯示一些文本。按下另一個後,返回值。
我會使用全局變量,但它無處不描述爲一個壞主意。在另一方面,如果我使用隊列(xQueueCreate,xQueueReceive,xQueueSend),我不會有所有的數據,以顯示它,我認爲,他們接受剛剛失去記憶之後創建副本。
你已經提到了一些可能的解決方案,但是說你因爲複製數據而丟失了內存,如果你想從兩個不同的地方寫入數據,總會遇到這種情況,無論如何只需使用FreeRTOS已經決定放棄很多內存來處理上下文切換,任務處理以及FreeRTOS使用的所有其他資源。可能的解決方案是:
全局變量 - 原因就是爲什麼它是一個糟糕的主意,是因爲 最好要限制訪問變量(範圍)。也很難 保證它的安全,因爲在任務切換等任務可能要 寫相同的變量,並可能損壞數據。但是,如果你 保護它的權利,即使用某種標誌的鎖變量, 這是完全正常的解決方案,並採用即sempahore或排隊通知顯示任務的數據被填滿。
隊列 - 你可以從多個任務發送信息,正如你所說的保持顯示任務副本的變量,這是更安全的選項,它不必丟失內存,因爲你不必丟失它任何其他地方,您只需讀取傳感器,然後將其放入隊列中,然後當您在顯示任務中收到它時,就會更改以前的值。所以讀取數據的任務可以說ADC不需要在讀取之間存儲它。
沒有什麼錯誤使用隊列。 http://www.freertos.org/Embedded-RTOS-Queues.html – OldProgrammer