Как стать автором
Обновить

Комментарии 8

Одно небольшое замечание: Cortex-M — это не архитектура. Это конкретное процессорное ядро. Архитектура называется ARMv7.

Причем Cortex M3/4/7 — ARMv7, а вот M0 — ARMv6.

Первое — в МК существуют, по меньшей мере, два вида памяти — память программ и память данных и обращение к ним осуществляется разными способами.

Только в случае гарварда. В случае фон-неймановской архитектуры это не так. В случае модифицированного гарварда память для инструкций и данных зачастую общая, но используются разные шины, разные кэши (когда есть, ессно).

Объяснение очень простое. Использование констант таким образом позволяет поиграться с их разными значениями в отладчике, не перепрошивая девайс всякий раз.

Не уверен, ведь в данном конкретном случае значение присваивается переменной в тексте, а не вводится из консоли.
Ввод с консоли не обязателен. Если компилировать с правильными флагами оптимизации, то компилятор оставит переменную, и большинство отладчиков позволят изменять значение этой переменной во время отладки.

Если же компилировать с максимальной оптимизацией, то я бы ожидал получить одинаковый результат компиляции в обоих случаях: и при переменной и при define.
Сначала я, действуя на автомате, написал, что следует применять #define


Но ведь это не влияет на размещение числа (память кода vs. данных). После препроцессинга и constant propagation, оба варианта будут иметь одинаковое представление в компиляторе. https://godbolt.org/g/3U78GY
А это зависит от включенного режима оптимизации, квалификатора переменной и места ее расположения.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории