Перейти к содержанию
    

Куда в микроконтроллере возвращается функция Main?

2 minutes ago, ViKo said:

А целиком можете выложить?

Вы не пробовали подобные вопросу гуглу задавать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 минут назад, Орлёнок сказал:

Даже если там нет валидных опкодов?

Там 0xFF. Конечно. Деваться некуда, перебирает, пока не переполнится.

Только что, esaulenka сказал:

Вы не пробовали подобные вопросу гуглу задавать?

"Смените пластинку", у вас заело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, ViKo сказал:

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

В нормально построенной программе на Cortex-M процессор никуда не "топает до конца". Потому, что есть MPU и грамотные люди разрешают выполнение кода только для тех регионов памяти, где расположен код. Так что "топать" будет только до конца текущего региона кода, а потом попадёт в обработчик fault-ов.

Если конечно MPU имеется на борту....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, ViKo сказал:

Там 0xFF. Конечно. Деваться некуда, перебирает

32-битное линейное адресное пространство занимает 4 Гига. После флеша там есть дыра, попытка чтения из которой вызывает исключение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так, понятно, на ассемблере писалось не для Cortex. А для 8051, PIC16.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По сути main - это вырожденная фишка программ под DOS или подобных антикварных оболочек.

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

Для МК этот main просто банальное наследие, атавизм. Освобождать ресурсы при выходе из main вряд ли кому-то когда-то понадобится.

Если же есть подобные потребности, то они решаются на уровне кода приложения.

 

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

 

Или сделать как в "старой доброй" ардуине: вызывается setup(), а следом в цикле loop(), выйти из которого не получится, поскольку бесконечный цикл находится снаружи этой loop().

Для конечного кодера этого более чем достаточно.

 

К слову, у меня main вот так выглядит:

int main()
{
	static InternalControlPanel internalControlPanel;
	internalControlPanel.initialize();
	internalControlPanel.run();
  
  // never reach here!
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, ViKo said:

Коллега задал вопрос, на который я однозначно ответить не смог. Если в Main нет бесконечного цикла, то при выходе куда попадет? Еще и код возврата передаёт же. Его и проверить можно, или как? 

RTOS или не RTOS - вот в чем вопрос.

То ли в  mbed то ли в zephyr так вообще предопределили IAR-овский __main и в С-ишный main  даже не заходят. 
  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос задал человек, с RTOS не знакомый. Пишет на ассемблере, а как на C - не знаю. PIC18.

Но мне уже самому стало интересно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, ViKo said:

человек, с RTOS не знакомый. Пишет на ассемблере, а как на C - не знаю. PIC18

Уникальный случай :biggrin:

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 минут назад, Forger сказал:

Уникальный случай :biggrin:

 

 

Рутина. Потребовалось поправить давно написанное, хвать, ан работника и нету. Ушел на лучшее место, и правильно сделал. Приходится править тому, кто есть (нач. отд. собственно, он же и гл. констр. по теме, 70+ лет).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 minutes ago, ViKo said:

Вопрос задал человек, с RTOS не знакомый. Пишет на ассемблере, а как на C - не знаю. PIC18.

Но мне уже самому стало интересно.

Пробегал мимо меня тут какой-то проект минского старого разработчика, уволившегося,  на двух PIC-ах, на ассемблере, управлял неким электромагнитом. 
Не он случайно?  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не он. И не я. Уволился как раз молодой, начинающий. На C писал, но насколько качественно, я не оценивал. А теперь нужно править, как обычно. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А под отладчиком посмотреть?

Без понятия о системе команд пиков, но по идее возвращаемое значение должно попасть в какой-то регистр, а дальше что-то типа HALT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...