Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Согласен, такую реализацию можно считать двумя стеками. Я думаю, это для совместимости с амёбами с фиксированным аппаратным стеком.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

если брать IAR, то разве он для младшеньких PIC-ов существует? а аппаратный стек вроде как больше нигде не присутствует... по-моему, еще у AT90S1200 или какого-то подобного "безОЗУшного"... ну так для таких "амеб" и Си применять - верх безрассудства. как-то странно все это...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Честно говоря, про амёб уже плохо помню, AVR-ки только на сопровождении старых проектов остались. Так то доводов в пользу такого подхода много можно придумать. Например, оптимизиция может лучше работать. Но это только программеры из IAR нам смогут рассказать.
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Могу предположить, что это имеет смысл для архитектур памяти, подобных 16-битному режиму x86, в котором один сегмент стека не может превышать 64К. Тогда два сегмента удваивают этот лимит.
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

я могу предположить много чего, но как эти сегменты увязаны с IAR для AVR или CodeVision?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Да никак. По умолчанию тихо мирно рядом лежат. При необходимости их можно легко растащить по разным сегментам памяти. Заподозрить IAR-овцев в некомпетентности трудно. Сделали так, значит так лучше. Может так удобней для их "stack usage analysis", например.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="ARV",url="/forum/viewtopic.php?p=3583992#p3583992"]я могу предположить много чего, но как эти сегменты увязаны с IAR для AVR или CodeVision?![/uquote]
Да никак. Какой смысл писать отдельные продукты для разных архитектур, если можно иметь общий продукт и разные только кодогенераторы? Если желательно иметь такое разделение стеков для того же CompactRISC (CR16C), то какой смысл ограничивать данный функционал только этой архитектурой?
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3584046#p3584046"]Какой смысл писать отдельные продукты для разных архитектур,[/uquote]Ну это вообще не довод. IAR поддерживает множество архитектур и ко всем с одним подходом нельзя. Только на ARM я видел от одного до пяти стеков на разных ядрах.
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3584051#p3584051"][uquote="ПростоНуб",url="/forum/viewtopic.php?p=3584046#p3584046"]Какой смысл писать отдельные продукты для разных архитектур,[/uquote]Ну это вообще не довод[/uquote]
Ядро Linux тоже поддерживает множество архитектур, но является единым продуктом.
Тоже самое можно сказать про LLVM, GCC, SDCC и т.п.
Кодогенераторы для разных архитектур, естественно разные, но ряд опций, имеющих смысл для одной архитектуры могут не иметь никакого смысла для другой. И это нормально.

P.S. Поймите, это не довод - это факт. Кроссплатформенный программный продукт всегда имеет общую кодовую базу и минимум различий, специфичных для разных платформ. Это в разы удешевляет поддержку такого продукта.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Так Вас же никто не заставляет. Если у Вас в коде есть динамические стековые переменные, то разные указатели стека существенно упростят отладку. Например, на x86 в GCC есть такой интересный параметр, как -fomit-frame-pointer/-fno-omit-frame-pointer, который управляет тем, будут ли локальные переменные адресоваться через ESP или EBP. В первом случае получается код удобный для отладки, во втором - более компактный и оптимальный.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ПростоНуб писал(а):на x86 в GCC есть такой интересный параметр
какое это имеет отношение к моему вопросу? :dont_know:
ARV писал(а):вопрос в контексте микроконтроллеров, у которых нет "разных" ОЗУ и нет защиты блоков ОЗУ от доступа "чужих" процессов
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="ARV",url="/forum/viewtopic.php?p=3584140#p3584140"]
ПростоНуб писал(а):на x86 в GCC есть такой интересный параметр
какое это имеет отношение к моему вопросу? :dont_know:[/uquote]
ARV писал(а): там всего 3 регистровых пары, успользующихся для указателей, и резервирование одной под указатель стека данных - это -30% потенциальной эффективности
В x86 тоже всего три регистра для указателей (EBP,ESI и EDI), но при этом потеря одного из них считается оправданной для упрощения отладки. Почему это не так для AVR?
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Отладка на AVR? Нет, сынок, это фантастика!
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а):Отладка на AVR? Нет, сынок, это фантастика!
ваша ирония неуместна. протеус для отладки AVR - самое оно :) вообще бесплатно :)))
ПростоНуб писал(а): (EBP,ESI и EDI), но при этом потеря одного из них считается оправданной для упрощения отладки
вообще говоря, я уже точно не помню, но вроде EBP (BP) изначально предназначен для работе в сегменте стека с локальными переменными, и как раз отказ от его такого назначения делается (вероятно) в угоду какой-то оптимизации, а не наоборот.

что касается AVR, то вопрос был не об оптимизации или её отсутствии, а о выделение под данные отдельного стека. по тем картинкам, что я приводил, видно, что это никак не связано с уровнем оптимизации или отладкой.

я скорее соглашусь, что это сделано "по традиции", как было высказано ранее, чем ради улучшения отладки.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="ARV",url="/forum/viewtopic.php?p=3584226#p3584226"]
ПростоНуб писал(а): (EBP,ESI и EDI), но при этом потеря одного из них считается оправданной для упрощения отладки
EBP (BP) изначально предназначен для работе в сегменте стека[/uquote]
Где я писал про BP? И о каких сегментах Вы ведете речь применительно к 32/64 разрядному регистру EBP?

ARV писал(а):как раз отказ от его такого назначения делается (вероятно) в угоду какой-то оптимизации
Именно так, потому что при адресации через указатель стека, который гуляет произвольным образом во время работы отлаживаемой функции, только компилятор помнит, где же относительно него расположена та или иная переменная.
ARV писал(а):я скорее соглашусь, что это сделано "по традиции", как было высказано ранее, чем ради улучшения отладки.
А это уже Ваше дело. Но отлаживать код JTAGICE mkii с двумя стеками будет существенно проще.
Хотя свое мнение я уже высказал выше:
ПростоНуб писал(а):Если желательно иметь такое разделение стеков для того же CompactRISC (CR16C), то какой смысл ограничивать данный функционал только этой архитектурой?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ПростоНуб писал(а):о каких сегментах Вы ведете речь применительно к 32/64 разрядному регистру EBP?
мда... архитектура x86, если вы вдруг не в курсе, начинается с времен 16-разрядных регистров BP/SP/EI/DI/AX и т.п. и вкупе с сегментными регистрами CS,DS и т.п. а буковку E к ним прилепили позже, "забыв" про сегменты. но термин "сегмент стека", по-моему, еще не умер, хотя теперь подразумевает просто область памяти...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="ARV",url="/forum/viewtopic.php?p=3584516#p3584516"]
ПростоНуб писал(а):о каких сегментах Вы ведете речь применительно к 32/64 разрядному регистру EBP?
мда... архитектура x86, если вы вдруг не в курсе, начинается с времен 16-разрядных регистров[/uquote]
ARV, не тупите и перечитайте тему. Речь шла о параметре -fomit-frame-pointer, который к 16-ти разрядным архитектурам не имеет вообще никакого отношения и влияет только на стратегию использования регистра EBP компилятором.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="ARV",url="/forum/viewtopic.php?p=3584607#p3584607"]я вообще спрашивал о микроконтроллерах... и к чему вы перескочили на какие-то абсолютно НЕ ТЕ платформы, и что этим хотите доказать[/uquote]
Я уже писал это выше дважды! Раз на "не тех" платформах оправдано резервирование одного регистра из трех под нужнды отладки, то почему это не может быть оправдано на МК?
Ответить

Вернуться в «Разные вопросы по МК»