Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
11 / 9 / 4
Регистрация: 08.07.2017
Сообщений: 70
1

вызов функции возвращающей значение без использования этого значения

23.07.2017, 22:06. Просмотров 613. Ответов 1
Метки нет (Все метки)

Взято из работающего кода отсюда
Есть функция:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uint8_t wg12232_read(uint8_t chip) {
  wg12232_set_data_port_direction(0x00);
  WG12232_DATA_PORT = 0x00;
  WG12232_A0RW_PORT |= (1 << WG12232_RW_PIN);
  WG12232_A0RW_PORT |= (1 << WG12232_A0_PIN);
  wg12232_strobe_on(chip);
  wg12232_delay();
  asm volatile ("nop");
  uint8_t res = wg12232_read_data_port_pins();
  wg12232_strobe_off(chip);
  WG12232_A0RW_PORT &= ~(1 << WG12232_RW_PIN);
  WG12232_A0RW_PORT &= ~(1 << WG12232_A0_PIN);
  return res;
}
 
Вот пара строк с ее вызовом:
C++
1
2
wg12232_read(chip); // dummy;
 uint8_t screenData = wg12232_read(chip);
В первом случае ее вызывают чтобы просто прогнать чтение из чипа контроллера дисплея, данные получаются с первого раза - мусорные и не нужны.
во второй строке, разумеется, полезные данные уже записываются в переменную.
1) спрашивается, если в первой строке данные никуда не идут, компилятор должен эту строку выкинуть?
1.1)-или то, что в теле функции есть запись в I/O регистры, спасает ее от оптимизации?
2)Если последнее верно, то куда же эти данные деваются в итоге?
иными словами если функция чего то возвращает, разве не обязаны эти данные куда либо попасть по правилам C++
по обратной аналоги с возвращающими void функциями, из них мы ничего не вправе требовать,
так и здесь,- должно быть мы обязаны их получить!!!?

прошу спецов прокомментировать...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2017, 22:06
Ответы с готовыми решениями:

Вызов метода из vector(a) в функции main без использования вызова execute внутри класса
Добрый день столкнулся с проблемой, что просто не могу вызвать метод из вектора в функции main. Код...

Вычислить значение выражение без использования функции
Построить и записать алгоритм вычисления значения функции ch(𝑥) действительного аргумента...

Создание функции, возвращающей 2 значения
Создаю функцию в Oracle, которая возвращает 2 значения. (числовое и текстовое) CREATE OR...

Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему?
Есть объект типа vector&lt;int&gt;, но если вместо него подставить вызов функции, возвращающей...

1
1775 / 1106 / 108
Регистрация: 04.01.2010
Сообщений: 3,875
23.07.2017, 23:01 2
Цитата Сообщение от HerrSchneider Посмотреть сообщение
прашивается, если в первой строке данные никуда не идут, компилятор должен эту строку выкинуть?
вряд-ли. Вызов есть вызов. Тем более с параметрами, тем более, с возвращаемым значением. Но компилятор может таки дойти до того, что выкинет, если посчитает, что функция ничего полезного не делает.
Цитата Сообщение от HerrSchneider Посмотреть сообщение
-или то, что в теле функции есть запись в I/O регистры, спасает ее от оптимизации?
Не регистры I/O, в общем случае компилятор о них не знает. I/O в понимании С объявляются volatile-переменными. Все остальные "чудеса" - локализации компилятора под определенный тип МК.
Цитата Сообщение от HerrSchneider Посмотреть сообщение
Если последнее верно, то куда же эти данные деваются в итоге?
По конвенции вызова результат останется в используемом(ых) в качестве временных, регистрах. Ну, то есть, скажем, в каком-нибудь r16. Функция закинет в него результат и выйдет, но результат никто не прочитает. R16 перетрется когда-нибудь новыми данными, когда понадобится.
По какому-то там правилу можно написать что-то типа
C
1
(void)wg12232_read(chip); // dummy;
Это даст намек компилеру, что результат таки точно никому не нужен, и предложит ему забить на него по-настоящему, даже без варнингов.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2017, 23:01

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

Как из функции возвращающей табличное значение грамотно выдернуть значение и при этом сделать INSERT
В базе существует таблица с полями k0, k1, k2. Написана функция, возвращающая табличное значение...

Выход из функции, возвращающей значение
Всем привет! Если функция не возвращает значение выхожу с помощью return, а как быть если надо...

Создание функции max, возвращающей максимальное значение из двух чисел
создайте функцию max, возвращающую максимальное значение из двух чисел. введите вещественные числа...

Вызов C++ dll без использования JNI
Можно ли вызывать функции dll которые написаны &quot;в стиле&quot; С (без JNI): extern &quot;C&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.