misyachniy (09.09.2018 22:14, просмотров: 144) ответил VLLV на но вопрос то был не про передачу, ну перечитайте же
До 4 переменных разместит в R0..R3. Остальные в стек.
Если есть еще и внутренние переменные, используемые одновременно с параметрами, то их тоже может положить в стек.
Но в любом случае R0..R3 каждая функция использует по "своему разумению".
Если переменная на определенном не используется, то на ее место сразу записывается новая или промежуточное вычисленное значение.
Пример приведенный выше:
int foo( int a ) { int b = a+1; int c = b*2; int d = c-3; return d*d; }
Явно видно, что после каждого действия исходная/вычисленная переменная не нужна и на ее место пишется новый результат.
Размер стека используемого функцией зависит не только от числа входных/промежуточных переменных, но и настроек компилятора.
Для увеличения быстродействия регистры от R4 и выше могут быть сохранены в стеке.
А сами регистры использованы для счетчика цикла(ов), констант и т.д.
По моему, в IAR ARM есть примочка для слежения за стеком.
Я как-то ловил выход указателя за массив, и помниться для слежения за стеком тоже был предусмотрен механизм.
Накладные расходы довольно небольшие.
P.S. В любом случае, чтение документации не сильно вредит здоровью.