подскажите, насколько я понял это просто правило хорошего тона инициализировать регистры стэка? даже если например сам стэк использоваться не будет? (ну например не будут вызваны всякие call, ret и тд)
подскажите, насколько я понял это просто правило хорошего тона инициализировать регистры стэка? даже если например сам стэк использоваться не будет? (ну например не будут вызваны всякие call, ret и тд)
Всем Салют, Мужики, нужен совет. Сейчас едет YMJ 13, какой компрессор взять к нему? Автоклав М-трианжел. Ну и насос какой... Читать далее
Да там у них бывает выходит из строя датчик каленвала. Ошибка по нему. Решается обычной заменой Наврал не прям по нему. Ну... Читать далее
Подскажите, кто нибудь с ADB и FASTBOOT умеет работать? Телефон Huawei Y6 prime 2018. Что не так делаю или nand наступил... Читать далее
Ребята, привет! Посоветуйте, пожалуйста, набор для дачного щита под алюминий — входит с гусака 6 квадратов, одна фаза, по... Читать далее
Доброе утро. Появилась интересная проблема. Пока было тепло не замечал. Прогретая машина, работает на холостых , дует печка... Читать далее
Общие правила взрывобезопасности для взрывопожароопасных химических, нефтехимических и нефтеперерабатывающих производств ПБ... Читать далее
Комментарии: 37
Alexander
Выделение переменных внутри функций как правило происходит через стек. При вызове функций и прерываний контекст сохраняется на стеке. Сложно представить себе ситуацию когда не будет использоваться стек.
Tiny
да просто не будут использованы инструкции call, ret, push, pop, reti кстати насчет прерываний мысль, они через call вызываются? тогда да, не проинициализировав стэк будет плохо
Alexander
Они вызываются аппаратным механизмом (реализующим out of order execution), но актуальный контекст при переходе по адресу из вектора обработчика сохраняется на стеке.
Tiny
понял. спасибо. тогда получается надо всегда инициализировать стэк
Alexander
Это практически ничего тебе стоить не будет.
Tiny
а по дефолту прерывания все запрещены? надо сначала проинициализировать стэк а потом разрешить прерывания?
Ogurezzz
Привет всем, у кого есть на примете хорошая статья, по работе с STM32 в Visual Studio Code? Или есть что-то более удобное под Linux?
Tiny
ну то есть не может быть ситуация когда я после инструкции 0x0000 пытаюсь инициализировать стэк а в это время вызывается прерывание которое использует неинициализированный стэк
Alexander
Скорее всего не может. По логике после сброса бит разрешения обработки прерываний должен быть снят. Но это нужно уточнить в документации (там прописаны default value регистров)
Tiny
хорошо. понял. посмотрю это
Dmitriy
Всегда будет снят. Нужно заново инициализировать Если аппаратный сброс система прерывания отключена
Tiny
ага. я уже у ДиХальта прочел этот момент) по умолчанию глобальный флажок и локальные флажки выключены ну это логично на самом деле, иначе может использоваться битый стэк
Dmitriy
Механизм такой как калл. За исключением аппаратной загрузки вектора, запрета вложенных прерываний (зависит от камня) и возврата с автоматической установкой разрешения глобальных прерываний Многие камни имеют теневые регистры для аппаратного сохранения контекста, но обычно у старших моделей
Tiny
а мне вот интересно. глобальный флажок разрешения прерываний находится в SREG. получается мк до выполнения нулевого адреса должен проициниализировать часть регистров? тот же SREG например
Dmitriy
Нет, прерывания инициализирует пользователь. При аппаратном сброса флаг GIE сбрасываются сами
Tiny
ну так по дефолту же глобальные прерывания запрещены. значит бит I в SREG должен где то быть установлен (или сброшен, не помню точное значение) до выполнения нулевой инструкции
Dmitriy
Читай, СБРПСЫВАЕТСЯ АППАРАТНО. триггер ячейки sreg I сбрасывется в 0
Tiny
как то сложновато понять
Dmitriy
До выполнения нулевой инструкции (правильно - вектора сброса) Что сложного... Триггер имеет аппаратный вход reset? Скажем так, вход reset напрямую подсоединен к сброса бита I
Tiny
у чукчи сейчас крыша поедет
Dmitriy
Tiny
пока буду считать что он как-то хитрым образом устанавливается до выполнения нулевой инструкции)
Dmitriy
Сбрасывается
Tiny
хорошо) сбрасывается) не так выразился
Dmitriy
Прерывания не могут автоматически работать после сброса, в том числе, что у тебя не проинициализирован стек тоже
Tiny
разумеется. это я знаю. флажок сброшен. прерывания не будут исполнены
Dmitriy
Именно...
Tiny
поэтому сначала инициализируем стэк. потом разрешаем прерывания. иначе могут быть сюрпризы.
Dmitriy
Переферийные прерыаания тоже должны быть по идее сброшены, но тут нужно дш смотреть
Tiny
дихальт пишет что мол все локальные прерывания запрещены по умолчанию
Dmitriy
У многих камней векторы прерывания находятся в озу, и их таблицы тоде будут не проинициализированы Это логично
Tiny
в озу под avr это flash память программы
Dmitriy
Не не авр. Пропускай мимо.. Это зачастую по принстонской архитектуре
Tiny
я помню была когда то речь что на современном железе часть кода может исполняться в озу, и мол там были некоторое прерывания ( но я думал это не про avr)
Dmitriy
Это например про x80, x86. Там принстон
Tiny
принстонская это фон неймоновская? каждый по разному называет
Dmitriy
Да, Это одно и тоже... Я учил принстон