PDA

Просмотр полной версии : Уровень стека программы превышен!



Lihoj
17.04.2016, 22:15
Добрый вечер! Есть один блок ПР110 и никак немогу создать программу к нему. На 114 программа работает нормально, а вот в 110 говорит что Уровень стека программы превышен! Значение глубины стека = 15! Как снизить уровень стека?

Василий Кашуба
17.04.2016, 22:21
Добрый вечер! Есть один блок ПР110 и никак немогу создать программу к нему. На 114 программа работает нормально, а вот в 110 говорит что Уровень стека программы превышен! Значение глубины стека = 15! Как снизить уровень стека?
Если программа не сложная, то тогда её нужно оптимизировать (проложить другие связи, либо поменять входа ФБ).

Lihoj
17.04.2016, 22:25
Программу копировал с ПР114 и есть много сетевых переменных, они тоже влияют на стек? А как поменять входа ФБ?

rovki
17.04.2016, 22:34
Что гадать ,схему в цех ...тогда помогут ,а так трата времени .

Lihoj
17.04.2016, 22:40
Что гадать ,схему в цех ...тогда помогут ,а так трата времени .
Программа на ПР114 работает!

Василий Кашуба
17.04.2016, 22:40
Программу копировал с ПР114 и есть много сетевых переменных, они тоже влияют на стек? А как поменять входа ФБ?
Привожу наглядный пример. 23937 и 23938 Схема функционально одна и та же, связи проложены по другому и уже стек занимают разный.

rovki
17.04.2016, 22:43
Программа на ПР114 работает!
С переменными не помошник ,не воспринимает глаз :(
Смотрите Q1 /

Lihoj
17.04.2016, 22:46
Так лучше линии в 110?

rovki
17.04.2016, 22:56
Так лучше линии в 110?
Надо проверять ...просто не воспринимаю .нужно читать переменные ,помнить где они ....для стороннего глаза не годится ...

Василий Кашуба
17.04.2016, 22:56
Так лучше линии в 110?
Вы мой пример посмотрели? Там на одной схеме стек 53%, на другой 7%, ну и чем больше переменных, тем быстрее переполнится стек.

rovki
17.04.2016, 22:57
Q1-является определяющим в переполнении стека .

Владимир Ситников
17.04.2016, 23:47
Привожу наглядный пример. 23937 и 23938 Схема функционально одна и та же, связи проложены по другому и уже стек занимают разный.

Получается, недоработка в ОЛ?

smk1635
18.04.2016, 00:35
Получается, недоработка в ОЛ?

Получается, что не доработка.

Lihoj
18.04.2016, 06:50
И как вывод на ПР110 такие неочень то сложные задачи невозможно выполнить! Для этих целей ПР114, на котором моя программа работает! Всем спасибо!

rovki
18.04.2016, 06:59
Получается, что не доработка.
Это обусловлено последовательным процессом обработки схемы в ОЛ от выхода ко входу и сверху в низ ,да еще наличием обратных связей,а так же ограничением процессора .Об этом уже много писалось ...
Не доработка была ,когда глубина стека была 6 ,а теперь он динамический .И ограничения наступают больше по физическим возможностям данной модели ПР.

Владимир Ситников
18.04.2016, 07:25
Это обусловлено последовательным процессом обработки схемы в ОЛ от выхода ко входу и сверху в низ, да еще наличием обратных связей, а так же ограничением процессора

^^^ это из серии "не читал, но осуждаю".
На картинки посмотрите: там 2 практически одинаковые программы, а использование стека почти в 8 раз различается.
Обратных связей нет, о каких ограничениях процессора речь -- тоже непонятно.


сверху в низ
А почему именно сверху вниз, а не тем способом, который экономит ресурсы?

capzap
18.04.2016, 07:48
А почему именно сверху вниз, а не тем способом, который экономит ресурсы?
что за способ, если не трудно, то вкратце расскажите

ЗЫ а может Вы и есть wal79 (http://www.owen.ru/forum/member.php?u=9924), только уже не работающий в компании, но знающий "секреты" :)

rovki
18.04.2016, 08:35
^^^ это из серии "не читал, но осуждаю".
На картинки посмотрите: там 2 практически одинаковые программы, а использование стека почти в 8 раз различается.
Обратных связей нет, о каких ограничениях процессора речь -- тоже непонятно.


А почему именно сверху вниз, а не тем способом, который экономит ресурсы?

Это вы не читали про стек для ПР110 ,а ту да же ....Лично я его первым сломал ,к слову .Идет последовательная обработка связей в ОЛ и промежуточные значения сохраняются в стеке .и как не крути с последовательностью (с низу в вверх ,сверху в низ) ,в реальной схеме может не хватить глубины стека ,если есть аппаратные ограничения .Потому и придумали разработчики более совершенный алгоритм -динамический стек и повысили его глубину до 15 ,при тех же ресурсах .
Простая замена неявных связей явными позволит снизить уровень стека в 4 раза во первом варианте .
Обработка элемента в ОЛ идет от выхода ко входу ,поэтому это всегда обратная связь ,учите мат часть.
нЕ поленитесь и сравните на каких МК сделан ПР110 и Пр114 (200) для общего развития .

rovki
18.04.2016, 08:46
что за способ, если не трудно, то вкратце расскажите

ЗЫ а может Вы и есть wal79 (http://www.owen.ru/forum/member.php?u=9924), только уже не работающий в компании, но знающий "секреты" :)
Если бы wal79 был vladimirisitnikov мы бы до сих пор не увидели бы законченное ОЛ и ОЛ был бы sitnikov ;)

Владимир Ситников
18.04.2016, 09:08
что за способ, если не трудно, то вкратце расскажите
Компиляция схемы в машинный код может выглядеть так:


push I1
push I2
push I3
push I4
push I5
add
add
add
add

В результате требуется стек глубины 5

А может так:


push I1
push I2
add
push I3
add
push I4
add
push I5
add

Результат тот же, но глубина требуемого стека -- 2.

При компиляции, ОЛ может рассмотреть несколько вариантов, и выбрать оптимальный по результирующей глубине стека, используемым регистрам и т.п.

Владимир Ситников
18.04.2016, 09:13
и как не крути с последовательностью (с низу в вверх ,сверху в низ)
Тут вы ошибаетесь.

Компилятор вполне может поменять связи местами, особенно, если это не влияет на результат.
Правило a+(b+c)=(a+b)+c в школе проходят. Для целых чисел оно соблюдается.
Поэтому ОЛ запросто могло бы преобразовать a+(b+(c+(d))) к виду ((a+b)+c)+d.


Простая замена неявных связей явными позволит снизить уровень стека в 4 раза во первом варианте
Посмотрите же на картинки хоть раз.
Там все связи явные. То, что замена схемы на такую же сокращает размер стека говорит лишь о том, что в этой области ОЛ недоработано.


Обработка элемента в ОЛ идет от выхода ко входу, поэтому это всегда обратная связь
Это вы учите мат часть. Не надо называть обратной связью то, что ей не является

rovki
18.04.2016, 09:19
Сигналы в железе распространяются от входов к выходам параллельно ,а в программной реализации -последовательно от выхода ко входу ,почувствуйте разницу .И здесь не строчный язык ,а графический ,который имеет свою специфику.
Явными связями называют те ,в которых явно задана последовательность выполнения ,если не задан порядок выполнения ,то это не явная связь в ОЛ.

capzap
18.04.2016, 09:25
Компиляция схемы в машинный код может выглядеть так:


push I1
push I2
push I3
push I4
push I5
add
add
add
add

В результате требуется стек глубины 5

А может так:


push I1
push I2
add
push I3
add
push I4
add
push I5
add

Результат тот же, но глубина требуемого стека -- 2.

При компиляции, ОЛ может рассмотреть несколько вариантов, и выбрать оптимальный по результирующей глубине стека, используемым регистрам и т.п.

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

rovki
18.04.2016, 09:37
хотите сказать что разраб лоджика имеет собственный компилятор, а не стороннего производителя. И которым может крутить как хочет, создавать ИИ который будет сам решать как скармливать представление компилятору
Особенно когда кроме логики(+-) есть работа с таймерами(реальным временем) ,с таблицами итп .Получится не компилятор,а экстрасенс компилятор;)

Владимир Ситников
18.04.2016, 09:39
а в программной реализации -последовательно от выхода ко входу
Возможно неумение программировать сказывается, но постарайтесь хотя бы не делать громких выводов о программировании. Программная реализация может быть самой разной, лишь бы ответ получался правильный.

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


И здесь не строчный язык, а графический
Учите матчасть. Процессор пр про графические языки ничего не знает. Использовать слова графический-строчный в данном контексте глупо.


Явными связями называют те ,в которых явно задана последовательность выполнения ,если не задан порядок выполнения ,то это не явная связь в ОЛ.
Вы всё-таки определитесь что такое _обратная_ связь.

rovki
18.04.2016, 09:48
Все уже давно определились и используют ,кроме вас .
И говорим мы не о ПР ,а о ОЛ .
От перемены мест слагаемых ответ не меняется-значит компилятор может использовать это свойство как ему удобно.

Компилятор работает не как ему удобно ,а по алгоритму заложенному разрабом .Я чувствую вы уже кодесис переписали ,теперь за ОЛ взялись .
И компилятор графического языка работает несколько иначе строчного ,где сам писатель определяет последовательность выполнения алгоритма...

Владимир Ситников
18.04.2016, 09:50
хотите сказать что разраб лоджика имеет собственный компилятор, а не стороннего производителя. И которым может крутить как хочет, создавать ИИ который будет сам решать как скармливать представление компилятору

Ну, да. Готов поспорить на 10'000 р, что компилятор ОЛ -> ПР самописный. По крайней мере, та его часть, которая вычисляет % занятости стека.
Т.е. ОЛ вполне в состоянии попробовать разные варианты скармливания и выбрать лучший.

Эта оптимизация в теории компиляторов давным-давно известна.

Владимир Ситников
18.04.2016, 09:58
И говорим мы не о ПР ,а о ОЛ .
Говорим о связке ОЛ+ПР.
Попробуйте объяснить что такое "стек" в графическом языке.
Подсказка: в документации ОЛ слово стек встречается только в фразе "доступное количество уровня стека".

capzap
18.04.2016, 09:58
Ну, да. Готов поспорить на 10'000 р, что компилятор ОЛ -> ПР самописный. По крайней мере, та его часть, которая вычисляет % занятости стека.
Т.е. ОЛ вполне в состоянии попробовать разные варианты скармливания и выбрать лучший.

Эта оптимизация в теории компиляторов давным-давно известна.
а стоит заниматься 1.7.51 если восьмерка уже пишется по другому и в дальнейшем будет полноценная поддержка старых устройств

rovki
18.04.2016, 10:00
а стоит заниматься 1.7.51 если восьмерка уже пишется по другому и в дальнейшем будет полноценная поддержка старых устройств
Если в 117 создаете проект для ПР110 ,то разницы нет ,как его переполнить ,как и в 51 .

Владимир Ситников
18.04.2016, 10:07
Компилятор работает не как ему удобно ,а по алгоритму заложенному разрабом
Именно! Я именно по этому и сказал, что в этой части наблюдается "недоработка в ОЛ".
Обычно, в компиляторы закладывают оптимизирующий модуль. Тут либо не делали, либо он хромает.


И компилятор графического языка работает несколько иначе строчного ,где сам писатель определяет последовательность выполнения алгоритма...
Не знаете как работают компиляторы (и зачем они нужны) -- нечего другим указывать.

Компилятор и нужен именно для того, чтобы последовательность выполнения алгоритма выбирал не автор программы, а компилятор.

Языки типа CFC/SFC/ST/LD/IL последовательность выполнения в железе не задают.

melky
18.04.2016, 10:27
vladimirisitnikov задают на некотором этапе. У меня распространенная ошибка это забываю в CDS указать - расположить согласно потоку данных. И такая чехарда начинается, пока не вспомнишь, что забыл.

Yegor
18.04.2016, 12:44
задают на некотором этапеСлово не очень удачное. Задают, конечно, но не препятствуют автоматическому переписыванию в эквивалентный код. А ещё точнее не устаналивают однозначного соответствия исходного текста или «графики» машинному коду. Таким свойством только самые низкоуровневые ассемблеры обладают, пожалуй.