MyTetra Share
Делитесь знаниями!
Как вывести шестнадцатеричное HEX-значение для типа int при отладке в PlatformIO
Время создания: 13.10.2022 22:49
Текстовые метки: platformio, VSCode, VS Code, hex, шестандцатеричный, int, целое, значение, представление, debug, отладка
Раздел: Компьютер - Аппаратное обеспечение - Микроконтроллеры ARM
Запись: xintrea/mytetra_syncro/master/base/1665690566qwf5moec0t/text.html на raw.github.com

При отладке микроконтроллеров иногда удобнее видеть шестнадцатеричное значение int-переменной вместо того чтобы смотреть на целочисленное представление. Как это можно сделать в PlatformIO?


Во-первых надо сказать, что из-за оптимизаций (например при использовании inline-функций) значение переменной не всегда можно увидеть. Тут уж ничего не поделаешь и придется модификатор "инлайновости" убирать.


Так же нужно проверить, с какими опциями компилируется debug-сборка. Для нормальной отладки все оптимизации должны быть отключены. В файле platformio.ini должна быть прописана опция debug_build_flags, примерно так:



[env:bluepill_f103c8]

platform = ststm32

board = bluepill_f103c8

framework = cmsis

build_flags = -std=c99 -O3

debug_build_flags = -O0 -g -ggdb



Увидеть отлаживаемую переменную можно в раскрывающейся области "Контрольное значение". Нажав на плюсик [+] можно добавить еще одну переменную (кстати, можно добавлять выражения). После нажатия плюсика надо просто ввести имя переменной. Или можно выделить имя переменной, нажать правую кнопку мыши, и в контекстном меню выбрать "Добавить контрольное значение".


Чтобы отлаживаемая переменная отображалась в HEX-нотации, необходимо перед именем переменной написать (void *), вот так:





В данном примере addr - это имя int-переменной.


Вообще, PlatformIO поддерживает следующие форматы:



Currently, VSCode does not provide an API to change the value format of watchpoints. You can manually cast watchpoint expressions to display the value as specific pointer types:


  • $pc, default decimal integer format
  • *0x10012000, an address, default decimal integer format
  • (void*)$pc, $pc register, hexadecimal format
  • *(void**)0x10012000, an address, hexadecimal format



Видно, что можно отображать не только int-значения, но и разыменовывать указатели в HEX-представление, и даже указатели на указатели и прочие сложные составные типы данных.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования