Возникла необходимость посмотреть состояния на ногах микроконтроллера (STM32), причем в динамике - нужно видеть ход обмена по интерфейсу I2C. Внешнего логического анализатора нет, запоминающий осциллограф постоянно у кого-то на руках и нужен в другом месте. Но в MDK-ARM есть встроенный виртуальный логический анализатор, причем можно смотреть переменные не только в симуляции, но и через SWJ в реальной железке (правда с некоторыми ограничениями). Есть, общее требование - переменная должна быть определена как глобальная или статическая, временные переменные со стэка, например, он смотреть не может. Есть также ограничения на некоторые периферийные устройства и их регистры. Но конкретно к GPIO это вроде не относится. Переменную с принятыми по SPI значениями АЦП он отрисовывает, а вот регистр IDR (входная защелка порта ВВ) ни в какую. Причем эта же переменная ссылающаяся на входной регистр также добавлена в watch, там она изменяется, в SystemViewer/GPIOB/IDR разумеется тоже, физически обмен какой-то есть, судя по тому что мелькает на обычном осцилле, но на графике все глухо как в танке. Как я даю доступ к порту - создаю псевдопеременную, по сути это указатель:
#define DATA_IN (*((volatile uint32_t *)0x40010C08))
или
uint32_t DATA_IN __attribute__((at(0x40010C08)));
Кайл, её принимает вполне нормально, не ругается - в анализатор тоже без проблем добавляет, но увы никакого обмена на графике не видно. Не могу сообразить где ошибка.
Или может для этой цели надо действовать как-то иначе. У АРМа/Кайла в хелпе эта тема освещается довольно скудно. Отладчик МТ-Линк, клон 8-й версии сеггеровского, по идее все должно работать, трассировка настроена в соответствии с рекомендациями к среде. Может кто имел дело с этим, может подсказать в чем загвоздка???