Я использую FreeRTOS 10.0 на Arduino с Atmel 328P и 2560
Мне нужно использовать LinkedList и, скорее, заново изобретать колесо, я использую здесь библиотеку LinkedList Arduino. .
Библиотека работает в стандартной конфигурации Arduino (loop), но когда я помещаю ее в RTOS, она не может сохранить значения. Счетчик size () увеличивается, как если бы он сохранялся, но все возвращаемые значения равны '0'.
Сначала я ожидал, что это проблема с реализацией библиотеки, но попытка Qlist дает те же результаты.
Есть ли что-то особенное, что мне нужно сделать, чтобы LInkedList правильно обрабатывал сохранение значений в FreeRTOS?
Код FreeRTOS:
#include <Arduino_FreeRTOS.h>
#include <LinkedList.h>
void TaskTest( void *pvParameters );
void setup() {
Serial.begin(115200);
while (!Serial) {
;
}
xTaskCreate(
TaskTest
, (const portCHAR *)"Test"
, 128
, NULL
, 2
, NULL );
}
void loop()
{
}
void TaskTest( void *pvParameters __attribute__((unused)) )
{
LinkedList<byte> list;
for (int i = 0; i < 256; i++) {
list.add(i);
Serial.print(i);
Serial.print(',');
Serial.print(list.get(list.size() - 1));
Serial.print(',');
Serial.println(list.size());
}
for (;;)
{
vTaskDelay(1);
}
}
Вывод кода FreeRTOS (усечено):
248,0,249
249,0,250
250,0,251
251,0,252
252,0,253
253,0,254
254,0,255
255,0,256
Стандартный код Arduino:
#include <LinkedList.h>
void setup() {
Serial.begin(115200);
while (!Serial) {
;
}
}
void loop() {
LinkedList<byte> list;
for (int i = 0; i < 256; i++) {
list.add(i);
Serial.print(i);
Serial.print(',');
Serial.print(list.get(list.size() - 1));
Serial.print(',');
Serial.println(list.size());
}
for (;;)
{
}
}
Стандартный кодовый вывод Arduino (усеченный):
249,249,250
250,250,251
251,251,252
252,252,253
253,253,254
254,254,255
255,255,256