Я пишу командный файл GDB для управления регистрами GPIO моей платы обнаружения STM32F407. Я использую сервер OpenOCD и gdb.
Пока мне удалось сбросить регистр BRR, чтобы отключить некоторые светодиоды. Это работает очень хорошо.
Моя цель - переключать LD3 (подключенный к GPIOD PIN15) каждый раз, когда программа ломается. Вот я и нашел адреса регистров и что в них писать. Чтобы переключить светодиод, я должен написать что-то другое в регистре BSRR.
Я написал это в gdb:
commands 1
# display GPIOD_BSRR write only reg (expected 0x00000000 )
monitor mdw phys 0x40020C18
# display GPIOD_ODR reg (expected 0x0000F000 when LED 12,13,14,15 are ON)
monitor mdw phys 0x40020C14
#Toggle LD3 ( GPIO_PIN_13) using GPIOD_BSRR reg
if monitor mdw phys 0x40020C14 == 0x0000F000 or 0x 00007000
monitor mww phys 0x40020C18 0x20000000
else
monitor mww phys 0x40020C18 0x00002000
end
end
Очевидно, что это не может работать, потому что команда monitor mdw phys 0x40020C14
не содержит результата, она просто печатает его.
Как сохранить значение чтения в переменной, чтобы сравнить его в операторе if?
Спасибо за помощь !
monitor mdw phys 0x40020C14
? Что-то вроде0x40020C14: 0000F000
? - person Mark Plotnick   schedule 14.11.20200x40020C14: 0000F000
Точно. Я не знаю, каков тип этого вывода и можно ли разделить его для сравнения. - person Gautier LEGRAND   schedule 17.11.2020