Сообщение Re[5]: Самый низкоуровневый язык, ага от 28.09.2023 8:47
Изменено 28.09.2023 8:52 vdimas
Re[5]: Самый низкоуровневый язык, ага
Здравствуйте, Евгений Музыченко, Вы писали:
V>>Чтобы уменьшить размер образа, оставив в нём только код.
ЕМ>Подозреваю, что не существует настолько примитивных средств промышленной (а не игрушечной) разработки, которые не позволяли бы распределять рабочее пространство, не занимая место в файле/прошивке.
Что ты понимаешь под "промышленной" разработкой?
Вот есть некие семейства микроконтроллеров, на них тулчейн — это ассемблер, Си, эмулятор, программатор и отладочные платы.
Если пользуешь Си, то для оперирования объявленными статическими данными (структурами, массивами) необходим CRT.
Но, выкинув CRT, можно взять камень с меньшим объёмом ПЗУ/ОЗУ, более дешевый, что даёт профит как раз при масовом выпуске некоего конечного изделия.
CRT почти всегда выкидывали, поэтому.
ЕМ>И даже если они существуют, такое распределение можно организовать более адекватными методами — хотя бы через struct/union.
Еще скажи через сишную инициализацию глобальных переменных вида:
Просто напоминаю, что почти всегда микроконтрллеры выполнены по гарвардской ахитектуре, а не по фон-неймановской, с которой ты писал этот пост.
Поэтому, такая инициализация в гарвардской бессмысленна, требует работы CRT в сочетании со специально-сгенерированным кодом на каждую такую инициализацию.
Например, в фон-неймановской архитектуре, проинициализированная глобальная переменная не требует лишнего кода, потому что в бинарном образе уже хранятся данные ровно так, как описаны в сниппете выше, т.е. загрузку этих данных выполняет внешний загрузчик. Но в микроконтроллере инициализацию переменной s должен выполнять код, прошитый в микрик — и ситуация резко меняется, не так ли?
V>>Чтобы уменьшить размер образа, оставив в нём только код.
ЕМ>Подозреваю, что не существует настолько примитивных средств промышленной (а не игрушечной) разработки, которые не позволяли бы распределять рабочее пространство, не занимая место в файле/прошивке.
Что ты понимаешь под "промышленной" разработкой?
Вот есть некие семейства микроконтроллеров, на них тулчейн — это ассемблер, Си, эмулятор, программатор и отладочные платы.
Если пользуешь Си, то для оперирования объявленными статическими данными (структурами, массивами) необходим CRT.
Но, выкинув CRT, можно взять камень с меньшим объёмом ПЗУ/ОЗУ, более дешевый, что даёт профит как раз при масовом выпуске некоего конечного изделия.
CRT почти всегда выкидывали, поэтому.
ЕМ>И даже если они существуют, такое распределение можно организовать более адекватными методами — хотя бы через struct/union.
Еще скажи через сишную инициализацию глобальных переменных вида:
SomeStruct s = { X, { Y, Z } };
Просто напоминаю, что почти всегда микроконтрллеры выполнены по гарвардской ахитектуре, а не по фон-неймановской, с которой ты писал этот пост.
Поэтому, такая инициализация в гарвардской бессмысленна, требует работы CRT в сочетании со специально-сгенерированным кодом на каждую такую инициализацию.
Например, в фон-неймановской архитектуре, проинициализированная глобальная переменная не требует лишнего кода, потому что в бинарном образе уже хранятся данные ровно так, как описаны в сниппете выше, т.е. загрузку этих данных выполняет внешний загрузчик. Но в микроконтроллере инициализацию переменной s должен выполнять код, прошитый в микрик — и ситуация резко меняется, не так ли?
Re[5]: Самый низкоуровневый язык, ага
Здравствуйте, Евгений Музыченко, Вы писали:
V>>Чтобы уменьшить размер образа, оставив в нём только код.
ЕМ>Подозреваю, что не существует настолько примитивных средств промышленной (а не игрушечной) разработки, которые не позволяли бы распределять рабочее пространство, не занимая место в файле/прошивке.
Что ты понимаешь под "промышленной" разработкой?
Вот есть некие семейства микроконтроллеров, на них тулчейн — это ассемблер, Си, эмулятор, программатор и отладочные платы.
Если пользуешь Си, то для оперирования объявленными статическими данными (структурами, массивами) необходим CRT.
Но, выкинув CRT, можно взять камень с меньшим объёмом ПЗУ/ОЗУ, более дешевый, что даёт профит как раз при масовом выпуске некоего конечного изделия.
CRT почти всегда выкидывали, поэтому.
ЕМ>И даже если они существуют, такое распределение можно организовать более адекватными методами — хотя бы через struct/union.
Еще скажи через сишную инициализацию глобальных переменных вида:
Просто напоминаю, что почти всегда микроконтроллеры выполнены по гарвардской ахитектуре, а не по фон-неймановской, с которой ты писал этот пост.
Поэтому, такая инициализация в гарвардской бессмысленна, требует работы CRT в сочетании со специально-сгенерированным кодом на каждую такую инициализацию.
Например, в фон-неймановской архитектуре, проинициализированная глобальная переменная не требует лишнего кода, потому что в бинарном образе уже хранятся данные ровно так, как описаны в сниппете выше, т.е. загрузку этих данных выполняет внешний загрузчик. Но в микроконтроллере инициализацию переменной s должен выполнять код, прошитый в микрик — и ситуация резко меняется, не так ли?
V>>Чтобы уменьшить размер образа, оставив в нём только код.
ЕМ>Подозреваю, что не существует настолько примитивных средств промышленной (а не игрушечной) разработки, которые не позволяли бы распределять рабочее пространство, не занимая место в файле/прошивке.
Что ты понимаешь под "промышленной" разработкой?
Вот есть некие семейства микроконтроллеров, на них тулчейн — это ассемблер, Си, эмулятор, программатор и отладочные платы.
Если пользуешь Си, то для оперирования объявленными статическими данными (структурами, массивами) необходим CRT.
Но, выкинув CRT, можно взять камень с меньшим объёмом ПЗУ/ОЗУ, более дешевый, что даёт профит как раз при масовом выпуске некоего конечного изделия.
CRT почти всегда выкидывали, поэтому.
ЕМ>И даже если они существуют, такое распределение можно организовать более адекватными методами — хотя бы через struct/union.
Еще скажи через сишную инициализацию глобальных переменных вида:
SomeStruct s = { X, { Y, Z } };
Просто напоминаю, что почти всегда микроконтроллеры выполнены по гарвардской ахитектуре, а не по фон-неймановской, с которой ты писал этот пост.
Поэтому, такая инициализация в гарвардской бессмысленна, требует работы CRT в сочетании со специально-сгенерированным кодом на каждую такую инициализацию.
Например, в фон-неймановской архитектуре, проинициализированная глобальная переменная не требует лишнего кода, потому что в бинарном образе уже хранятся данные ровно так, как описаны в сниппете выше, т.е. загрузку этих данных выполняет внешний загрузчик. Но в микроконтроллере инициализацию переменной s должен выполнять код, прошитый в микрик — и ситуация резко меняется, не так ли?