Информация об изменениях

Сообщение Re[5]: Самый низкоуровневый язык, ага от 28.09.2023 8:47

Изменено 28.09.2023 8:52 vdimas

Re[5]: Самый низкоуровневый язык, ага
Здравствуйте, Евгений Музыченко, Вы писали:

V>>Чтобы уменьшить размер образа, оставив в нём только код.

ЕМ>Подозреваю, что не существует настолько примитивных средств промышленной (а не игрушечной) разработки, которые не позволяли бы распределять рабочее пространство, не занимая место в файле/прошивке.

Что ты понимаешь под "промышленной" разработкой?
Вот есть некие семейства микроконтроллеров, на них тулчейн — это ассемблер, Си, эмулятор, программатор и отладочные платы.

Если пользуешь Си, то для оперирования объявленными статическими данными (структурами, массивами) необходим CRT.
Но, выкинув CRT, можно взять камень с меньшим объёмом ПЗУ/ОЗУ, более дешевый, что даёт профит как раз при масовом выпуске некоего конечного изделия.
CRT почти всегда выкидывали, поэтому.


ЕМ>И даже если они существуют, такое распределение можно организовать более адекватными методами — хотя бы через struct/union.


Еще скажи через сишную инициализацию глобальных переменных вида:
SomeStruct s = { X, { Y, Z } };



Просто напоминаю, что почти всегда микроконтрллеры выполнены по гарвардской ахитектуре, а не по фон-неймановской, с которой ты писал этот пост.
Поэтому, такая инициализация в гарвардской бессмысленна, требует работы CRT в сочетании со специально-сгенерированным кодом на каждую такую инициализацию.

Например, в фон-неймановской архитектуре, проинициализированная глобальная переменная не требует лишнего кода, потому что в бинарном образе уже хранятся данные ровно так, как описаны в сниппете выше, т.е. загрузку этих данных выполняет внешний загрузчик. Но в микроконтроллере инициализацию переменной s должен выполнять код, прошитый в микрик — и ситуация резко меняется, не так ли?
Re[5]: Самый низкоуровневый язык, ага
Здравствуйте, Евгений Музыченко, Вы писали:

V>>Чтобы уменьшить размер образа, оставив в нём только код.

ЕМ>Подозреваю, что не существует настолько примитивных средств промышленной (а не игрушечной) разработки, которые не позволяли бы распределять рабочее пространство, не занимая место в файле/прошивке.

Что ты понимаешь под "промышленной" разработкой?
Вот есть некие семейства микроконтроллеров, на них тулчейн — это ассемблер, Си, эмулятор, программатор и отладочные платы.

Если пользуешь Си, то для оперирования объявленными статическими данными (структурами, массивами) необходим CRT.
Но, выкинув CRT, можно взять камень с меньшим объёмом ПЗУ/ОЗУ, более дешевый, что даёт профит как раз при масовом выпуске некоего конечного изделия.
CRT почти всегда выкидывали, поэтому.


ЕМ>И даже если они существуют, такое распределение можно организовать более адекватными методами — хотя бы через struct/union.


Еще скажи через сишную инициализацию глобальных переменных вида:
SomeStruct s = { X, { Y, Z } };



Просто напоминаю, что почти всегда микроконтроллеры выполнены по гарвардской ахитектуре, а не по фон-неймановской, с которой ты писал этот пост.
Поэтому, такая инициализация в гарвардской бессмысленна, требует работы CRT в сочетании со специально-сгенерированным кодом на каждую такую инициализацию.

Например, в фон-неймановской архитектуре, проинициализированная глобальная переменная не требует лишнего кода, потому что в бинарном образе уже хранятся данные ровно так, как описаны в сниппете выше, т.е. загрузку этих данных выполняет внешний загрузчик. Но в микроконтроллере инициализацию переменной s должен выполнять код, прошитый в микрик — и ситуация резко меняется, не так ли?