Что делает этот код инициализации сборки руки?

Это часть кода инициализации скачанной прошивки какого-то микроконтроллера stm32f030. Разобрал с помощью радара2. Он вызывается после инициализации часов, но до инициализации кучи.

0x0800335c      00f00bf8       bl fcn.08003376
0x08003360      0028           cmp r0, 0       
0x08003362      01d0           beq 0x8003368   
0x08003364      fff7d4ff       bl INIT2        
0x08003368      0020           movs r0, 0
[...]
0x08003376      0120           movs r0, 1      
0x08003378      7047           bx lr           

Насколько я могу судить, r0 всегда устанавливается в 1, поэтому INIT2 никогда не пропускается. Я не понимаю. Что мне не хватает?

Возможно, эта прошивка используется для нескольких устройств. У кого-то 1, у кого-то 0. Видимо компилятор не смог оптимизировать.

Jester 13.02.2023 20:28

Без LTO функция в другом модуле не будет встроена. Если есть другой исходный файл с функцией DeviceSupportsFeatureX, то он будет выглядеть так.

ElderBug 13.02.2023 20:43

Отличная идея. Но я думаю, что INIT2 является частью любого компилятора, который написал код запуска и выполняет инициализацию кучи. Это не особенно легко сказать, потому что, похоже, используется какой-то материал таблицы переходов, сгенерированный таблицей памяти ... так что тогда это флаг «включена ли функция», это было бы что-то вроде «используем ли мы флаг компилятора c». было бы проще, если бы я знал, какой компилятор это сделал.

Scheintod 13.02.2023 21:11

Это может быть код, который распознает, выполняется ли он из ОЗУ или ПЗУ. «INIT2» не потребуется, если он работает из ОЗУ. Наверное, вы всегда запускаете из ПЗУ?

artless noise 18.02.2023 19:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я согласен с интерпретацией ElderBug в комментариях, что первый блок кода принадлежит модулю, поддерживающему несколько сборок, а вторая функция — модулю, сконфигурированному для конкретной сборки.

Если вы не отредактируете вопрос, чтобы предоставить более подробную информацию, мы можем только догадываться о цели, но вот одна правдоподобная интерпретация, похожая на код, над которым я работал:

Вы хотите пропустить инициализацию кучи в INIT2 при «горячей» перезагрузке, когда оперативная память сохраняется в режиме пониженного энергопотребления. Конкретный двоичный файл, который у вас есть, не поддерживает режимы с низким энергопотреблением, поэтому его функция жестко закодирована для возврата ненулевого значения, но в другой сборке он может считывать регистры питания и может возвращать ноль, если ОЗУ было сохранено.

Другие вопросы по теме