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

Re: ОЗУ в STM32

Пн фев 13, 2023 17:47:31

alex1126 писал(а):где это независимые и равноправные функции?

А что значит "равноправные"? Одна вырождается в другую:
Код:
void *
realloc(void *ptr, size_t len)
{
   struct __freelist *fp1, *fp2, *fp3, *ofp3;
   char *cp, *cp1;
   void *memp;
   size_t s, incr;
   /* Trivial case, required by C standard. */
   if (ptr == 0)
      return malloc(len);
.....

Re: ОЗУ в STM32

Чт фев 16, 2023 22:03:11

В IAR realloc без вызова malloc умеет обходиться.

ну ок, пусть обходится.

А если уж тут собрались такие специалисты по памяти, обьясните мне, почему при вызове функции не один раз а несколько, используемый размер стека увеличивается?

Код:
int main(void) {

int i,
char c;

....

fun(&i, &c);
fun(&i, &c);

....
fun(&i, &c);
...
}


Вот пример. Я считал что когда вызывается функция, текущие локальные переменные сохраняются в стеке (ну еще там какая то информация о соостоянии), в вызванной функции происходит еще увеличение используемого стека на локальные переменные этой функции, а после выхода из функции, размер используемого стека возвращается к размеру который был до вызова функции.

Но в примере выше, keil после компиляции показывает что максимальный размер стека увеличился на 8 байт по сравнению с вариантом когда в начале функция fun() не вызывается дважды. Или это попытки компилятора чего там наоптимизировать?

Re: ОЗУ в STM32

Чт фев 16, 2023 22:26:57

Предлагаю для начала ознакомиться с ARM ABI и после посмотреть как это работает под отладчиком на разных уровнях оптимизации.

Re: ОЗУ в STM32

Чт фев 16, 2023 22:39:36

за ссылку спасибо, а на вопрос то можете ответить?

Re: ОЗУ в STM32

Чт фев 16, 2023 22:56:07

У меня нет хрустального шара, чтобы гадать что там за функции. Но чуть выше я писал, что переменные могут и в РОН располагаться. Добавили кода и они в стек переехали. И потом, ARM Compiler V6 очень агрессивный в оптимизации - код в "лапшу режет". Поэтому, совет посмотреть под отладкой что там да как повторю в очередной раз.
Ответить