gpt4 book ai didi

c++ - 在 FreeRTOS 中使用 LinkedList 保存值失败

转载 作者:行者123 更新时间:2023-11-30 05:01:15 32 4
gpt4 key购买 nike

我在带有 Atmel 328P 和 2560 的 Arduino 上运行 FreeRTOS 10.0

我需要使用 LinkedList,而不是重新发明轮子,我正在使用 LinkedList Arduino library here. .

该库在标准 Arduino(循环)配置中工作,但当我将其放入 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

最佳答案

LinkedList 类使用“new”运算符在堆上动态分配新节点。您的 FreeRTOS 构建是否分配了足够的堆,就像您的非 FreeRTOS 循环代码一样?如果您将 heap_3 分配器与 FreeRTOS 本身一起使用,那么所有 FreeRTOS 对象和任务堆栈也会占用系统堆的空间。

关于c++ - 在 FreeRTOS 中使用 LinkedList 保存值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401893/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com