Использование OpenOCD для определения использования оперативной памяти в микроконтроллере (ARM Cortex-M3)

Я хотел бы увидеть, сколько ОЗУ используется прошивкой, записав известный шаблон и сравнив содержимое ОЗУ, чтобы увидеть, сколько было изменено.

я пробовал

reset halt
load_image pattern.bin 0xaddress
resume
(let target run for a bit)
halt
dump_image sram.bin 0xaddress 0xsize

но, похоже, я получил содержимое флэш-памяти и нигде не вижу тестового шаблона. Использую ли я правильные команды? Если я «проверю» вручную, загружая и выгружая, данные идентичны. Может ли halt повлиять на содержимое ОЗУ? В противном случае можно ли предположить, что приложение фактически инициализирует всю оперативную память, что делает анализ трудным/невозможным?


Должен заметить, что у меня есть только "дамп" прошивки, т.е. я его не собираю.


person handle    schedule 20.02.2020    source источник
comment
Не могли бы вы предоставить точную ссылку на Cortex-M3, который вы используете, например, ST Microelectronics STM32F103C8T6? это помогло бы выяснить, какие именно адреса следует использовать в командах load_image/dump_image.   -  person Frant    schedule 20.02.2020
comment
Файл карты, созданный компоновщиком, может сообщить вам, сколько оперативной памяти используется вашей программой.   -  person kkrambo    schedule 20.02.2020
comment
как выглядит ваш скрипт компоновщика, где .text, .data и .bss? для использования оперативной памяти вы хотите проверить не только область .text, но и всю ее.   -  person old_timer    schedule 20.02.2020
comment
@kkrambo Я не собираю прошивку.   -  person handle    schedule 20.02.2020
comment
@Frant Спасибо, но проблема была не в адресах.   -  person handle    schedule 20.02.2020
comment
как вы пишете известный шаблон, если вы не строите код? не писал загрузочный код для заполнения оперативной памяти и т. д.? начните с нескольких очень простых 10 или около того линий ассемблерных программ, познакомьтесь с инструментами openocd, а затем переходите к более сложным вещам.   -  person old_timer    schedule 20.02.2020
comment
какой чип используете?   -  person old_timer    schedule 20.02.2020
comment
@old_timer Я пишу шаблон в ОЗУ, используя OpenOCD. У меня нет исходного кода для устройства. Я не упомянул номер детали, потому что это больше касается общего подхода к OpenOCD, и я не смог найти многого в Интернете.   -  person handle    schedule 21.02.2020
comment
но вы знаете, что это программа на основе оперативной памяти, а не на флэш-памяти, как обычно?   -  person old_timer    schedule 21.02.2020
comment
если не ваша программа, то зачем проверять использование оперативной памяти?   -  person old_timer    schedule 21.02.2020
comment
@old_timer Нет, я не знаю, работает ли и какая часть прошивки из ОЗУ. Я хотел проверить использование оперативной памяти, чтобы увидеть, есть ли неиспользуемая память.   -  person handle    schedule 21.02.2020
comment
если он не будет выполняться, потому что вы запускаете его не в том месте, тогда этот эксперимент не сработает. Как выглядит первая горстка слов двоичного кода? каковы их значения (в шестнадцатеричном формате, конечно)   -  person old_timer    schedule 21.02.2020


Ответы (1)


Мне пришлось выполнить soft_reset_halt, чтобы получить на ПК адрес вектора сброса. . Моя версия OpenOCD предупреждает меня, что эта команда устарела. Затем я смог обнаружить несколько вхождений моего тестового шаблона в дампе оперативной памяти. Кроме того, существуют заметные различия между образом ОЗУ и прошивкой, поэтому кажется, что прошивка действительно использует большую часть ОЗУ.

(это может не быть проблемой, если ваш интерфейс использует линию физического сброса?)

person handle    schedule 20.02.2020
comment
если вы строите для mcu, .text будет в оперативной памяти копией .data, которую вы копируете в оперативную память, а .bss вы обнуляете в начальной загрузке. так что большая часть оперативной памяти не будет программой, в общем. но есть исключения. есть причина, по которой у mcus больше flash, чем ram обычно - person old_timer; 20.02.2020
comment
@old_timer - я не собираю прошивку. - person handle; 20.02.2020
comment
если вы используете линию физического сброса, то .text переходит во флэш-память и т. д., и я написал это неправильно... - person old_timer; 20.02.2020
comment
на ваш вопрос про строку сброса, .текст копию .data и где и сколько .bss будет во флеше. бутстрап копирует .data и обнуляет .bss. Так что большая часть оперативной памяти не будет программой, в общем. но есть исключения. есть причина, по которой у mcus больше flash, чем ram обычно - person old_timer; 20.02.2020
comment
вы можете возобновить 0xaddress, если вы используете файл elf, вам не нужен 0xaddress в строке загрузки изображения в двоичном файле. технически это должно быть резюме 0xaddress|1. двоичный файл должен быть создан для работы в оперативной памяти, а не для запуска во флэш-памяти после сброса, двух разных точек/методов входа. (или мягкий сброс) - person old_timer; 20.02.2020