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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> многоканальная обработка, нюансы
Doka
сообщение Dec 10 2006, 18:30
Сообщение #16


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



Цитата(SasaTheProgrammer @ Dec 10 2006, 14:35) *
Указатель передают в двух случаях. Во-первых, есть существеноое различие, для которого применяют специальные термины - "передача по ссылке"/"передача по значению". При "передаче по значению" функция получает свою копию данных, с которой можно делать всё что угодно. При "передаче по ссылке" любые изменения производятся в самих данных. Для коротких, неструктурных данных принято "передавать по ссылке" только те данные, которые нужно менять внутри функции (так, чтобы изменения были видны снаружи). В этом случае передача по ссылке - необходимые накладные расходы, на "разименование указателя" тратятся драгоценные такты.
ну в ЦОС вовсе они не драгоценные - там "драгоценные" тратятся "на что надо")) т.е. по сравнению с тем, сколько кушают сами циклы ЦОС - оверхед при вызове функций и запихивании в стек параметров - это мизер. По кр.мере по тактам. А вот памяти никогда не бывает много - по кр.мере выбором того или иного способа передачи параметров код можно было бы немного "ужать".

Цитата(SasaTheProgrammer @ Dec 10 2006, 14:35) *
Во-вторых, если речь идёт о структурах/объединениях/массивах (если передать в функцию массив, то на самом деле она получит указатель на первый элемент). Тут оказывается выгоднее передать указатель, чем запихивать структуру в регистры/стек. Т.е. простое программистское правило: "видишь передаваемый указатель - это точно out-параметер, возможно он ещё и in" в данном случае нарушается. Нужно очень вниматеьно обращатся с переданой таким образом структурой и обязательно (!!!) документировать в комментариях меняет ли функция что-либо, а если да - то какие поля.
да . с этим уже столкнулся - чем дальше растёт исходник - тем сложнее в нем ориентироваться. шас вот курю doxygen manual. надеюсь его использованием закрыть часть проблем с "глобальным" документтированием.


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
=GM=
сообщение Dec 11 2006, 15:27
Сообщение #17


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



To SasaTheProgrammer
1) i8051 конечно, прошу прощения, рука пронесла(:-)

2) >>(у кого ещё есть дп? smile.gif<<
Я имел в виду процессоры Тексас Инструментс, конкретно TMS320F28xx серию, хотя, насколько знаю, у всех современных тексасов есть дп-адресация. А вот у i8051, по-моему, нет такой адресации, да и разбиения на страницы тоже нет, разбиение было в i8048, но опять же только в смысле программного счетчика.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
SasaTheProgramme...
сообщение Dec 12 2006, 03:43
Сообщение #18


Частый гость
**

Группа: Новичок
Сообщений: 129
Регистрация: 4-08-06
Пользователь №: 19 327



Цитата(Doka @ Dec 10 2006, 17:30) *
Цитата(SasaTheProgrammer @ Dec 10 2006, 14:35) *
на "разименование указателя" тратятся драгоценные такты.
ну в ЦОС вовсе они не драгоценные - там "драгоценные" тратятся "на что надо")) т.е. по сравнению с тем, сколько кушают сами циклы ЦОС - оверхед при вызове функций и запихивании в стек параметров - это мизер. По кр.мере по тактам. А вот памяти никогда не бывает много - по кр.мере выбором того или иного способа передачи параметров код можно было бы немного "ужать".

"Случаи разные бываают" smile.gif . У нас - с точностью до наоборот. Памяти хватает и с запасом, а вот замена
Код
ptr1->ptr2->s++;
if (ptr1->ptr2->s2 != ptr1->s3)
/* и т.д. */

на
Код
struct S2 *ptrS2 = ptr1->ptr2;
ptrS2->s++;
if (ptrS2->s2 != ptr1->s3)
/* и т.д. */

даёт очень заметный выиграш. Впрочем, компилятор тоже небезгрешен smile.gif .


Цитата(=GM= @ Dec 11 2006, 14:27) *
To SasaTheProgrammer
1) i8051 конечно, прошу прощения, рука пронесла(:-)

Да я тоже как-то не обратил на это внимания и в результате... понял правильно smile.gif
Цитата
2) >>(у кого ещё есть дп? smile.gif<<
Я имел в виду процессоры Тексас Инструментс, конкретно TMS320F28xx серию, хотя, насколько знаю, у всех современных тексасов есть дп-адресация. А вот у i8051, по-моему, нет такой адресации, да и разбиения на страницы тоже нет, разбиение было в i8048, но опять же только в смысле программного счетчика.

У 8051 был один единственный 16-разрядный регистр, через который можно было адресовать "большую" память. А про тексасы я просто не курсе. Теперь буду знать!

Сообщение отредактировал SasaTheProgrammer - Dec 12 2006, 03:44
Go to the top of the page
 
+Quote Post

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

 


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


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