реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как писать хороший код
_Pasha
сообщение Sep 16 2016, 18:04
Сообщение #16


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



я в личку отвечу сейчас.
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 21 2016, 18:31
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



И года не прошло))
Go to the top of the page
 
+Quote Post
Njalenoc
сообщение Oct 18 2016, 16:36
Сообщение #18





Группа: Участник
Сообщений: 5
Регистрация: 18-10-16
Пользователь №: 93 811



код, который согласован со стандартом
Go to the top of the page
 
+Quote Post
Smoky
сообщение Dec 18 2016, 12:40
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 7-05-10
Из: Оренбург
Пользователь №: 57 135



Коллеги, допустимо ли использовать функции таким образом?
Объявлена функция:

// Передаёт и принимает 1 байт по SPI, возвращает полученное значение
uint8_t spi_send_recv(uint8_t data) {
SPDR = data;
while (!(SPSR & (1 << SPIF)));
return SPDR;
}

а используется без возврата значения:

// Записывает значение однобайтового регистра reg (от 0 до 31), возвращает регистр статуса
uint8_t radio_writereg(uint8_t reg, uint8_t val) {
csn_assert();
uint8_t status = spi_send_recv((reg & 31) | W_REGISTER);
spi_send_recv(val);
csn_deassert();
return status;


--------------------
Лень, оттвори дверь, сгоришь - а хоть и сгорю, но не оттворю.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 18 2016, 12:53
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Smoky @ Dec 18 2016, 14:40) *
допустимо ли
Да. Что вас смущает? И что мешает попробовать откомпилить?

P.S. printf() тоже значение возвращает, но не попадалось ни одного примера, где это значение использовалось бы.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Smoky
сообщение Dec 18 2016, 13:03
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 7-05-10
Из: Оренбург
Пользователь №: 57 135



Цитата(Сергей Борщ @ Dec 18 2016, 18:53) *
Да. Что вас смущает? И что мешает попробовать откомпилить?


До компиляции ещё далеко, я только изучаю, как это делается. Использование функций таким образом встречаю впервые...


--------------------
Лень, оттвори дверь, сгоришь - а хоть и сгорю, но не оттворю.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 18 2016, 13:29
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Smoky @ Dec 18 2016, 15:03) *
Использование функций таким образом встречаю впервые...

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Smoky
сообщение Dec 18 2016, 14:53
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 7-05-10
Из: Оренбург
Пользователь №: 57 135



Цитата(zltigo @ Dec 18 2016, 19:29) *
Этого не может быть, если только это не вообще первая функция, которую Вы увидели sm.gif


Си начал использовать с 2010 года, осваиваю самостоятельно но честное слово, такое использование функций не встречал. С самого начала учился по учебнику Бредли Л.Джонса и Питера Эйткена, там всё "жёстко", такой вольности нет. И всё же интересно, куда "улетает" возвращаемое значение функции которое не ждут?


--------------------
Лень, оттвори дверь, сгоришь - а хоть и сгорю, но не оттворю.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 18 2016, 15:01
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Smoky @ Dec 18 2016, 16:53) *
Си начал использовать с 2010 года, осваиваю самостоятельно но честное слово, такое использование функций не встречал. С самого начала учился по учебнику Бредли Л.Джонса и Питера Эйткена, там всё "жёстко", такой вольности нет. И всё же интересно, куда "улетает" возвращаемое значение функции которое не ждут?

Никуда не улетает. Возвращаемое значение в регистре находится. Хочешь пользуй, хочешь нет. В случае функции "ничего" не возвращающей, там наверняка мусор, а так некоторое определенное значение. Вот и вся разница sm.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Smoky
сообщение Dec 18 2016, 15:17
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 7-05-10
Из: Оренбург
Пользователь №: 57 135



Цитата(zltigo @ Dec 18 2016, 21:01) *
Никуда не улетает. Возвращаемое значение в регистре находится. Хочешь пользуй, хочешь нет. В случае функции "ничего" не возвращающей, там наверняка мусор, а так некоторое определенное значение. Вот и вся разница sm.gif


Спасибо за разъяснение, буду использовать эту возможность.


--------------------
Лень, оттвори дверь, сгоришь - а хоть и сгорю, но не оттворю.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 18 2016, 18:16
Сообщение #26


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Smoky @ Dec 18 2016, 15:03) *
До компиляции ещё далеко, я только изучаю, как это делается. Использование функций таким образом встречаю впервые...


Я тоже, честно говоря.
Обычно явно задают некую переменную куда читают из SPI.

Иначе оптимизатор может выкинуть операцию чтения и будете неделями искать откуда в SPI лишние данные берутся.
Go to the top of the page
 
+Quote Post
DASM
сообщение Dec 18 2016, 18:48
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Господи, обычный side effect.. железячники одни собрались что ли?

Цитата(AlexandrY @ Dec 18 2016, 21:16) *
Я тоже, честно говоря.
Обычно явно задают некую переменную куда читают из SPI.

Иначе оптимизатор может выкинуть операцию чтения и будете неделями искать откуда в SPI лишние данные берутся.

Неиспользуемую дальше переменную он выкинет куда быстрее. Тут он ничего не выкинет, все регистры объявлены volatile , реже прагмами
И тут даже к стилю не придраться, в названии все сказано, так более чем можно писать. Даже нужно по смыслу, чтение спи это всегда запись, дажее если запись не имеет смысла. А две отдельные функции тут будут источником глюков, особенно если юнит тест на одной. Разве что можно рид сделать оберткой send_recv
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 18 2016, 19:40
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AlexandrY @ Dec 18 2016, 20:16) *
Иначе оптимизатор может выкинуть операцию чтения и будете неделями искать откуда в SPI лишние данные берутся.

Невежество sad.gif. Ни при каких обстоятельсвах обращение volatilе переменной не может быть выброшено.
Цитата
Обычно явно задают некую переменную куда читают из SPI.

Даже просто прочитать в никуда можно и нужно, так:
Код
SPDR;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DASM
сообщение Dec 18 2016, 20:47
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Вы наконец то стали говорить вещи с которыми я согласен sm.gif
Или я стал мыслить иначе bb-offtopic.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 18 2016, 20:59
Сообщение #30


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(DASM @ Dec 18 2016, 22:47) *
Вы наконец то стали говорить вещи с которыми я согласен sm.gif
Или я стал мыслить иначе bb-offtopic.gif


Ладно, ради такой дружбы признаю свою ошибку. Юзайте volatile и будьте счастливы! biggrin.gif
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.0148 секунд с 7
ELECTRONIX ©2004-2016