Курс лекций - Микропроцессоры

Рекурсивный вызов подпрограмм


В стандартном языке программирования С все функции могут быть вызваны сами из себя или использоваться различными программными потоками одновременно. Для этого все локальные переменные располагаются в . В микроконтроллерах семейства MCS-51 ресурсы ограничены, поэтому в языке программирования С-51 для функций по умолчанию располагаются не в стеке, а непосредственно во внутренней памяти микроконтроллера. Если же подпрограмма должна вызываться рекурсивно, то ее необходимо объявить как программу с повторным вызовом (reentrant):

return_type funcname ([args]) reentrant

Классический пример рекурсии - это математическое определение факториала n!:

n! = 1 при n=0; n*(n-1)! при n>1 .

Функция, вычисляющая факториал, будет иметь следующий вид:

long fakt(int n) reentrant {return ((n==1)?1:n*fakt(n-1)); }

Содержание раздела