Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Бесконечный цикл...

Сб сен 01, 2018 18:23:04

Добрый вечер всем!!
Такой у меня завис с пониманием процессов. Что происходит с программой, когда она заканчивается?
Она выгружается из памяти? Или не выгружается, но считается выгруженной? То есть она перестает принимать, допустим, прерывания, действия которых в ней описаны? Или принимает, но не выполняет?
Это как-то связано с тем, что в ассемблерном коде в конце есть волшебное слово END?
Заранее благодарю за весьма содержательные ответы по теме!!!!!!!

Re: Бесконечный цикл...

Сб сен 01, 2018 18:49:08

khch писал(а):Она выгружается из памяти?
Она выгружается из флеш памяти со стиранием страниц где она находилась. :)))


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

Да. Меня крайне смущает наличие while (1) {пустой}
Нет, не в первый раз, я тут с вами (в том числе) обсуждал другой вопрос.
Просто изучаю и мириться с тем, что "так должно быть, не парься" не хочу.

Добавлено after 2 minutes 44 seconds:
Постойте.... Да вы издевайтесь!!!! Как это из флеш?

Re: Бесконечный цикл...

Сб сен 01, 2018 19:05:55

Для полного понимания процесса рекомендую изучить стартап. В нём всё видно, как инициализируются данные, запускается main() и что происходит после выхода из неё. Прерывания, кстати, продолжат обрабатываться.

Re: Бесконечный цикл...

Сб сен 01, 2018 19:18:39

Вы всё-таки упускаете немаловажный аспект! - после стирания флешь, команда 'END' выключает питание процессора. 8)


Слово флеш пишется без мягкого знака. Умник хренов.
Хорошо, что ты хоть в чем-то что-то понимаешь - можешь выёживаться. Интересно было бы видеть тебя в какой-нибудь незнакомой тебе дисциплине. Какой ты умный тогда бываешь.... Дибил....

Добавлено after 52 seconds:
Для полного понимания процесса рекомендую изучить стартап.

Что за стартап? Ткнёте носом?
Последний раз редактировалось khch Сб сен 01, 2018 19:21:14, всего редактировалось 1 раз.

Re: Бесконечный цикл...

Сб сен 01, 2018 19:19:59

... флешь ... плешь ... какая разница :)))

Re: Бесконечный цикл...

Сб сен 01, 2018 19:24:51

Что за стартап? Ткнёте носом?
Каким компилятором пользуетесь, чтобы поточнее ткнуть. А то он разный бывает.

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

Re: Бесконечный цикл...

Сб сен 01, 2018 19:26:55

... флешь ... плешь ... какая разница :)))


Разница заключается в том, что человек начитанный\читавший не позволит себе такое: ему будет больно смотреть на слово, которое он написал очевидно не так, каким его всегда видел в книгах.
А такие ошибки себе позволяет человек, который просто слышал это слово. И работает с предметом обсуждения исключительно по устному обьяснению более опытных коллег. Ну выдрессирован просто на длинную серию однотипных процессов. так что нех тут блестеть знаниями.

Re: Бесконечный цикл...

Сб сен 01, 2018 19:30:01

Слово флеш пишется без мягкого знака. Умник хренов.
Хорошо, что ты хоть в чем-то что-то понимаешь - можешь выёживаться. Интересно было бы видеть тебя в какой-нибудь незнакомой тебе дисциплине. Какой ты умный тогда бываешь.... Дибил....

Хех, очередное чмо из подворотни вылезло и обгадилось....

Добавлено after 1 minute 8 seconds:
Разница заключается в том, что человек начитанный\читавший не позволит себе такое: ему будет больно смотреть на слово, которое он написал очевидно не так, каким его всегда видел в книгах.

Существо, вы разве понимаете значение слова "книга"? Я думаю что нет. 8)

Re: Бесконечный цикл...

Сб сен 01, 2018 19:31:09

Что за стартап? Ткнёте носом?
Каким компилятором пользуетесь, чтобы поточнее ткнуть. А то он разный бывает.


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

Re: Бесконечный цикл...

Сб сен 01, 2018 19:32:53

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

... а оно ещё обиделось и дальше поплыло... кто бы мог подумать... а ведь и правда - плывёт и не тонет.... :)))

Предупреждение, для начала. Fakir.

Re: Бесконечный цикл...

Сб сен 01, 2018 19:34:10

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

Re: Бесконечный цикл...

Сб сен 01, 2018 19:38:12

Слово флеш пишется без мягкого знака. Умник хренов.
Хорошо, что ты хоть в чем-то что-то понимаешь - можешь выёживаться. Интересно было бы видеть тебя в какой-нибудь незнакомой тебе дисциплине. Какой ты умный тогда бываешь.... Дибил....

Хех, очередное чмо из подворотни вылезло и обгадилось....

Добавлено after 1 minute 8 seconds:
Разница заключается в том, что человек начитанный\читавший не позволит себе такое: ему будет больно смотреть на слово, которое он написал очевидно не так, каким его всегда видел в книгах.

Существо, вы разве понимаете значение слова "книга"? Я думаю что нет. 8)


Ожидаемо. ничего другого это оно не высрало бы в любом случае. Спорить не буду: опустишь до себя, а на этом уровне я тебе не ровня.

Добавлено after 3 minutes 47 seconds:
Млять, а ведь хотел уже кинуть стартап для изучения. Ну и разбирайся сам, хамло.


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

Re: Бесконечный цикл...

Сб сен 01, 2018 19:40:03

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

оно ещё забыло поучить Вас как правильно слово "стартап" писать... :write:

Re: Бесконечный цикл...

Сб сен 01, 2018 19:42:15

... а оно ещё обиделось и дальше поплыло... кто бы мог подумать... а ведь и правда - плывёт и не тонет.... :)))


:) уровень дискуссии.....
Хорошо, что я не знаю тех книг, которые знаешь ты.

Re: Бесконечный цикл...

Сб сен 01, 2018 20:38:12

khch писал(а):Постойте.... Да вы издевайтесь!!!! Как это из флеш?
Просто шучу на что указывает смайлик.
По вопросам похоже что вы первый раз видите МК, но до этого писали для компа.
Нужно понимать что процессор все равно что-то выполняет (или спит если выполнена соответствующая инструкция). Если программа находится во флеше, то как она оттуда будет выгружаться? Если выполняется из оперативки, тогда при завершении функции ее конечно можно оттуда выгрузить, но это редкость в МК.

Вот здесь я выкладывал код стартапа для M0 (без таблицы прерываний и обработчиков по умолчанию). https://radiokot.ru/forum/viewtopic.php ... 7#p3443117
Видно что если программа выйдет из main то зациклится в инструкции.
Код:
b .
Если этого не сделать, инструкции будут выполняться дальше (как писал выше процессор должен что-то выполнять), а что там будет неизвестно. В лучшем случае произойдет исключение с переходом в один из обработчиков прерываний типа HardFault. Но может выполнится какой-то фрагмент кода который выполняться не должен что приведет к непредсказуемым последствиям, особенно если это медицинское, военное или космическое оборудование.

Re: Бесконечный цикл...

Сб сен 01, 2018 20:52:25

Вообще-то я подразумевал оперативку.
Хорошо, я задам вопрос иначе.
"Нужно понимать что процессор все равно что-то выполняет" - меня не устраивает. Почему он "всегда что-то выполняет"?
Если я удалю блок while (true) {} то что он будет выполнять?

Добавлено after 1 minute 36 seconds:
Дойдет до последней инструкции и что дальше????

Re: Бесконечный цикл...

Сб сен 01, 2018 21:48:15

khch писал(а):Вообще-то я подразумевал оперативку.
Уточните модель МК. А то может вы спрашиваете про малину, а мы тут отвечаем подразумевая STM32.

khch писал(а):"Нужно понимать что процессор все равно что-то выполняет" - меня не устраивает. Почему он "всегда что-то выполняет"?
Потому что так устроен процессор. И это касается не только ARM, но и интеловских процев (x86, x64) что в компе и даже советского КР580ВМ80А. Найдите литературу о процессорах и прочитайте как они устроены и работают.

khch писал(а):Если я удалю блок while (true) {} то что он будет выполнять?
Подключаете отладчик и смотрите что будет если убрать цикл. После выхода за пределы исходника смотреть нужно асм код. Скорее всего начнет выполнять "мусор" или какой-то участок кода если он расположен сразу же после main. Речь не про расположение в исходнике, а про то куда компилятор и линкер определят ту или иную функцию.

Re: Бесконечный цикл...

Вс сен 02, 2018 07:56:23

Я не могу смотреть отладчиком. Убирай-не убирай, в конце концов он оказывается в одном и том же месте. В каком-то цикле.

Re: Бесконечный цикл...

Вс сен 02, 2018 08:10:51

Процессор всегда выполняет поток команд, когда не спит, не выключен и не на "паузе". Этот процесс не может закончиться: если ядро активно, оно выполняет команды. Если это ну вообще совсем не надо - ставят бесконечный цикл и выполняется он. Как максимум ARMовский процессор еще можно запаузить (опкоды WFI и WFE), тогда он перестанет выполнять фоновую программу до очередного события или прерывания. При сильном желании в даташите можно найти описание как сделать interrupt-driven программу, где фон всегда остановлен WFE или WFI и активируются только прерывания на какие-то события. Но это довольно специфичный способ написания программы, требующий мыслить исключительно "машинами состояний" (state machine).

Ах да... из main или что там у вас в случае микроконтроллера некуда возвращаться. Main как правило никто не запускал (в смысле, операционки или другой программы). Поэтому вернуться - некуда. Когда main только получает управление, у вас может совершенно пустой стек. Поэтому предыдущего адреса на который можно было бы вернуться - просто не существует. Startup в каком-то случае может вызывать main (потратив немного стэка) и что-то делать в случае если main вдруг с какого-то перепуга удумает вернуться. Но это явно ошибочная ситуация, поэтому обычно код который после вызова main вешает процессор, чтобы он не наломал дров. Если активен watchdog, он через какое-то время перезагрузит систему.

В реальных системах watchdog обычно активен, из соображений поддержания системы в рабочем состоянии без участия людей. Поэтому с практической точки зрения цикл вида while (1) имеет примерно такой смысл: софт совсем спятил! поэтому прекратим пытаться делать что либо и подождем пока вачдог перезагрузит, чтобы начать с чистого листа. Ну или пока это у разработчика, он может вачдогом не пользоваться и вместо этого поизучать систему в явно ошибочном состоянии, пытаясь понять как такое получилось.

Re: Бесконечный цикл...

Вс сен 02, 2018 08:30:52

linuxdude, вы явно понимаете как что работает, но делаете довольно смелые обобщения на основе частного опыта. Тем самым формулируете в общем случае ошибочные утверждения. Если бы ТС не кинулся оскорблять всех без разбора, я бы ещё вчера кинул пример стартапа, в котором отлично видно кто кого вызывает и что делается после main.
Ответить