Например TDA7294

Форум РадиоКот • Просмотр темы - Как вызывается функция? (Язык си)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср дек 17, 2025 03:44:07

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Как вызывается функция? (Язык си)
СообщениеДобавлено: Вт май 09, 2023 13:27:01 
Прорезались зубы

Зарегистрирован: Чт апр 08, 2021 09:46:48
Сообщений: 225
Рейтинг сообщения: 0
Доброго дня! Гуру, нужна ваша помощь. Вопрос связан с вызовом функции.
К примеру, есть два файла (file1 и file2). В файле 1 находится main(). В файле 2 реализована функция Sum()
В функции main() вызывается функция Sum()

FILE1.c

#include “file2.h”
int main(void)
{
Sum();
return 0;
}




FILE2.c

int Sum(void)
{
Int x = 0;
x = 7+6;
return x;
}

Вопрос: Как осуществляется выполнение функции Sum()? Место прототипа функции (Sum() ) вставляется реализация этой функции?
Или осуществляется переход на эту функцию, где она реализована(то есть в файле 2)? Если да, то как это работает, когда эта программа загружена во flash память микроконтроллера? Я понимаю это так, что функция Sum() хранится в определенном месте в памяти. Выполняется функция main() и когда вызывается функция Sum(), то указатель перемещается на адрес в памяти где находится функция Sum(), выполняет эту функцию и возвращается обратно в main(). Так ли это работает?

Или подскажите пожалуйста где и что нужно почитать что бы понять это. (По просторам интернета я уже бегал).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как вызывается функция? (Язык си)
СообщениеДобавлено: Вт май 09, 2023 14:39:46 
Мудрый кот

Карма: 25
Рейтинг сообщений: 487
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1801
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Как написали, функция Sum() представляет собой макрос (x = 7 + 6): будет вычисляться один раз при компиляции (= 13) и каждый раз, когда вызывается Sum(), заменяется с 13.

Чтобы не ошибиться в объяснении, сделайте функцию напр. с входные аргументы. Напр.:
FILE2.c
Код:
int Sum(int k)
{
  int x = 0;
  x = 7 + k;
  return x;
}

и вызовите в main(), когда необходимо:
Код:
...
Sum(6) ;
...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как вызывается функция? (Язык си)
СообщениеДобавлено: Вт май 09, 2023 14:56:44 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Как осуществляется выполнение функции Sum()? Место прототипа функции (Sum() ) вставляется реализация этой функции?
Оптимизатор может так сделать, если посчитает нужным (если функция малесюнькая. то затраты на переходы возвраты больше, чем вставить ее всю).
Или осуществляется переход на эту функцию, где она реализована(то есть в файле 2)?
и так тоже, если оптимизатор посчитал нужным, обычно, именно так.
когда вызывается функция Sum(), то указатель перемещается на адрес в памяти где находится функция Sum(), выполняет эту функцию и возвращается обратно в main(). Так ли это работает?
ну, в общем, да.
Или подскажите пожалуйста где и что нужно почитать что бы понять это.
В настройках компилятора включаем опцию "выдать листинг ассемблера и смотрим его. Поэтому ассемблер знать обязательно. Это понимание работы и отладка. Изучение ассемблера и архитектуры позволяет понять все эти вызовы-возвраты, что приоисходит с регистрами, стэком, прерываниями и т.д и т.п.

Полагаю, поиском здесь на форуме что-то типа "книжки по изучению микроконтроллеров" найти можно, они предлагались много раз.

З. Ы. Рекомендуемую литературу можно было бы давно сделать какой-нить закрепленной шапкой в ветках.... плохо, что этого нет на форуме


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как вызывается функция? (Язык си)
СообщениеДобавлено: Вт май 09, 2023 15:16:02 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2918
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24611
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
выполняет эту функцию и возвращается обратно в main().

В вашем случае компилятор вообще проигнорирует вызов функции, поскольку вы вызываете функцию возвращающую значение и ничему это значение не присваиваете. Это безотносительно замены функции на константу, о чем вам ранее сказали.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Как вызывается функция? (Язык си)
СообщениеДобавлено: Вт май 09, 2023 21:37:46 
Прорезались зубы

Зарегистрирован: Чт апр 08, 2021 09:46:48
Сообщений: 225
Рейтинг сообщения: 0
Спасибо!
Если б ассемблер знал, то скорее всего такие вопросы бы не возникли)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как вызывается функция? (Язык си)
СообщениеДобавлено: Вт май 09, 2023 22:04:11 
Держит паяльник хвостом
Аватар пользователя

Карма: 2
Рейтинг сообщений: 154
Зарегистрирован: Ср окт 04, 2017 20:47:40
Сообщений: 984
Рейтинг сообщения: -1
maksimdag0 писал(а):
Если б ассемблер знал, то скорее всего такие вопросы бы не возникли)
Если хотите именно программировать, а не создавать видимость сего процесса, то для применяемого вами МК -
Martian писал(а):
ассемблер знать обязательно. Это понимание работы и отладка. Изучение ассемблера и архитектуры позволяет понять все эти вызовы-возвраты, что происходит с регистрами, стэком, прерываниями и т.д и т.п. 8)
Увы, но только так и никак иначе. :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как вызывается функция? (Язык си)
СообщениеДобавлено: Ср май 10, 2023 13:49:08 
Родился

Зарегистрирован: Ср мар 18, 2020 10:25:01
Сообщений: 14
Откуда: Москва
Рейтинг сообщения: 0
Если Вы так сильно переживаете за время вызова функции и ресурсов памяти, то чем Вас не устраивает вариант
#define SUM(x,y)((x)+(y))


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y