Ошибка выполнения ESP32 в массиве 2d
Я пытаюсь последовательно вывести значение b[0][0]
.
Должен быть равен нулю, но это не работает!
Вот код
void setup() {
Serial.begin(115200);
byte b[321][241];
Serial.println(b[0][0]);
}
void loop() {
}
Если массив небольшой, как b[2][2]
, он не работает
Теоретически esp32 имеет оперативную память объемом 520 КБ SRAM, так что может ли это быть проблемой?
Вот код ошибки
rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8
Код соответствует требованиям, но возникает ошибка при запуске esp32
версия esp32 для arduino — 1.0.4
@Avon97, 👍0
Обсуждение2 ответа
Лучший ответ:
В ESP32 для запуска всего используется FreeRTOS, в том числе API Arduino. Ваш код выполняется в собственном потоке ("loopTask"), и этой задаче по умолчанию выделено 8192 байта стека.
xTaskCreateUniversal(loopTask, "loopTask", 8192, NULL, 1, &loopTaskHandle, CONFIG_ARDUINO_RUNNING_CORE);
Вы не можете создавать локальные переменные и другие данные стека, которые в сумме превышают 8192 байта.
Вместо этого вам придется либо использовать переменную как глобальную переменную (или статическую локальную), чтобы она размещалась в глобальном сегменте данных, либо использовать new
или malloc
чтобы создать его в куче (и не забудьте соответствующий вызов delete
или free
, когда закончите с этим).
создание переменной как глобальной, кажется, решает проблему., @Avon97
Это может быть связано с размером последовательного буфера. ESP32 может записывать новые данные до завершения предыдущей передачи. Добавьте задержку после строки печати и посмотрите.
нет, это не сработало, @Avon97
- Как прочитать входящие ШЕСТНАДЦАТИРИЧНОЕ значение из serial метод read ()?
- Печать массива с помощью функции печати и последовательной записи в Arduino Uno
- Ошибка чтения флэш-памяти, 1000
- Как платы Arduino устраняют необходимость нажимать кнопки для прошивки?
- Как создать массив из serial.read?
- Нужен ESP32 для использования 3 последовательных портов
- Не могу подключиться к плате ESP32 через последовательный порт
- Почему Serial.write() работает, а Serial.print() нет?
как насчет b[2][241] или b[321][2] ?, @jsotola
Размер стека обычно намного меньше оперативной памяти, особенно если он работает под RTOS, поэтому я ожидаю проблем с ним., @KIIV
@jsotola для b[321][2] я получаю значение 165 в качестве вывода, разве оно не должно быть равно нулю, также для b[2][241] равно 165, @Avon97