ESPShell для Arduino :: ЦПУ и память

[ На русском ] ↔ [ English ]

Установка частоты CPU

Процессор ESP32 поддерживает изменение частоты во время выполнения. На классическом ESP32 основная частота CPU также может влиять на частоту шины APB: если частота CPU опускается ниже 80, то частота APB будет равна частоте CPU. Это повлияет на все тайминги ШИМ и других модулей, но вам не нужно об этом беспокоиться: ESPSHell пересчитывает все тайминги при изменении частоты APB.

КомандаОписание и примеры
cpu

Отображает список поддерживаемых частот:

esp32#>cpu
% Supported frequencies are: 240, 160, 120, 80, 40, 20 and 10 MHz
esp32#>

cpu FREQ

Устанавливает частоту CPU в FREQ МГц (например, 240).

ESP32 поддерживает частоты 240, 160 и 80 МГц. В зависимости от частоты кварцевого генератора (XTAL) могут быть доступны и другие варианты, такие как XTAL / 4 и/или XTAL / 2. Если задана неподдерживаемая частота, ESPShell отобразит список допустимых значений:

  esp32#>cpu 1
  % 1 MHz is an unsupported frequency
  % Supported frequencies are: 240, 160, 120, 80, 40, 20, and 10 MHz
  % Invalid 1st argument "1" ("? cpu" for help)

Отображение информации о CPU

show cpuid

Отображает информацию о железе и программном обеспечении:

show cpuid
Рис. 1: Вывод команды "show cpuid"

Вывод разделён на четыре секции: Аппаратная часть, Flash, Прошивка и Последняя загрузка. Первая секция показывает CPUID, частоту CPU, частоту XTAL, частоту шины APB и температуру ядра CPU.

Вторая секция содержит данные о flash-чипе: его размер и ID производителя.

Секция прошивки показывает версии компонентов, использованных при сборке прошивки/скетча, включая версию Arduino core (несоответствие версий — частая причина проблем), версию ESP-IDF и номер версии ESPShell.

Последняя секция включает вывод команды "uptime", отображающей время работы системы и причину последней перезагрузки.

Отображение информации о памяти

ESPShell предоставляет две команды для отображения информации о памяти: show memory и show memory ADDRESS ...

КомандаОписание и примеры
show memory

Отображает общий объём и доступную память, видимую из скетча:

esp32#>sh mem
% -- Heap information -- 
%
% If using "malloc()" (default allocator))":
% 298824 bytes total, 249320 available, 110580 max per allocation
%
% If using "heap_caps_malloc(MALLOC_CAP_INTERNAL)", internal SRAM:
% 347284 bytes total, 296928 available, 110580 max per allocation
Эта команда может помочь выявить утечки памяти в вашем скетче.

show memory ADDRESS

show memory ADDRESS [ COUNT ] [signed|unsigned|float|void*|int|char|short]

Отображает содержимое памяти, начиная с указанного адреса. Адрес должен быть в шестнадцатеричном формате, с префиксом "0x" или без него.

В самой простой форме эта команда требует только один аргумент — адрес. Результатом будет дамп 256 байт, начиная с указанного адреса. Обратите внимание, что архитектура памяти ESP32 достаточно сложна: некоторые области доступны только через шину инструкций, некоторые — только с ядра CPU#0 (ESPSHell обычно работает на ядре #0), некоторые — только при доступе как к 32-битным словам и т.д. Espressif предоставляет документы с описанием карт памяти конкретных моделей ESP32: для ESP32-S3, для ESP32 и т.д.

Пример: Показ содержимого памяти начиная с адреса 0x3fc97a30

    esp32#>sh mem 0x3fc97a30
           0  1  2  3   4  5  6  7   8  9  A  B   C  D  E  F  |0123456789ABCDEF
    ----------------------------------------------------------+----------------
    0000: 01 00 00 00  02 00 00 00  03 00 00 00  9d ff ff ff  |................
    0010: 0c 0c 03 00  0b 00 00 00  5c 32 ca 3f  00 00 00 00  |........\2.?....
    0020: 14 0e 09 3c  2c 2b ff ff  00 c2 01 00  1c 00 00 08  |...<,+..........
    0030: 00 01 00 00  00 70 00 00  00 00 00 00  01 00 00 00  |.....p..........
    0040: 00 00 00 00  ff ff ff ff  00 00 00 00  00 00 00 00  |................
    0050: 00 00 00 00  00 00 00 00  00 00 00 00  02 00 00 00  |................
    0060: 00 00 00 00  ff ff ff ff  00 00 00 00  00 00 00 00  |................
    0070: 00 00 00 00  00 00 00 00  c8 7a c9 3f  ff ff 3f b3  |.........z.?..?.
    0080: 00 00 00 00  03 00 00 00  00 00 00 00  00 00 00 00  |................
    0090: 00 00 00 00  00 00 00 00  00 40 00 60  c8 bb 07 3c  |.........@.`...<
    00a0: 00 00 00 00  cc bb 07 3c  00 00 00 00  d0 bb 07 3c  |.......<.......<
    00b0: 00 00 00 00  d4 bb 07 3c  00 00 00 00  d8 bb 07 3c  |.......<.......<
    00c0: 00 00 00 00  dc bb 07 3c  00 00 00 00  e0 bb 07 3c  |.......<.......<
    00d0: 00 00 00 00  e4 bb 07 3c  00 00 00 00  e8 bb 07 3c  |.......<.......<
    00e0: 00 00 00 00  ec bb 07 3c  00 00 00 00  f0 bb 07 3c  |.......<.......<
    00f0: 00 00 00 00  f4 bb 07 3c  00 00 00 00  f8 bb 07 3c  |.......<.......<
    esp32#>

Команда поддерживает необязательные аргументы — рассмотрим их

Необязательные аргументы: количество и тип

Чтобы задать количество элементов, используйте аргумент COUNT:

    esp32#>sh mem 0x3fc97a30 32
           0  1  2  3   4  5  6  7   8  9  A  B   C  D  E  F  |0123456789ABCDEF
    ----------------------------------------------------------+----------------
    0000: 01 00 00 00  02 00 00 00  03 00 00 00  9d ff ff ff  |................
    0010: 0c 0c 03 00  0b 00 00 00  5c 32 ca 3f  00 00 00 00  |........\2.?....
    esp32#>

Если COUNT не указан, по умолчанию будет показано 256 байт

Чтобы интерпретировать данные как определённый тип, укажите один из следующих типов: "signed", "unsigned", "char", "short", "int" или "void *". При указании типа COUNT по умолчанию становится равным 1 вместо 256.

Тип "void *" используется для 32-битного дампа в шестнадцатеричном виде. Некоторые области памяти ESP32 можно читать только как 32-битные слова:

esp32#>sh mem 0x50000000 void *
% 0x50000000 : 0x344dbbe1
esp32#>

ПРИМЕЧАНИЕ: хотя аргумент COUNT в приведённом выше примере не указан, ESPSHell выводит только 1 элемент, так как был задан тип (void *). Если вы хотите увидеть больше элементов, COUNT нужно задать явно:

esp32#>sh mem 0x50000000 10 void *
% Array of 10 elements, 4 bytes each
%  Address   :  Value
% 0x50000000 : 0x344dbbe1
% 0x50000004 : 0x9d2aa486
% 0x50000008 : 0x476c2e42
% 0x5000000c : 0x40da87ea
% 0x50000010 : 0x607b4d64
% 0x50000014 : 0xfc28182e
% 0x50000018 : 0x97b54ec4
% 0x5000001c : 0xefe11d7a
% 0x50000020 : 0xd703bad6
% 0x50000024 : 0x698b7ad1
esp32#>

ПРИМЕЧАНИЕ: типы "void *", "void*" или просто "*" — все они означают одно и то же: данные будут интерпретированы как беззнаковые 32-битные значения и выведены в шестнадцатеричном формате

Эта команда может быть использована для отображения содержимого массивов и переменных скетча, если известны их адреса

Пример: Массив беззнаковых целых чисел расположен по адресу 0x3fc97a30. Показать первые 3 элемента массива

esp32#>sh mem 0x3fc97a30 3 unsigned int
% Array of 3 elements, 4 bytes each
%  Address   :  Value
% 0x3fc97a30 : 1 (0x1 as hex)
% 0x3fc97a34 : 2 (0x2 as hex)
% 0x3fc97a38 : 3 (0x3 as hex)
esp32#>