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

 
 
> Стиль программирования на Си, описание функции
sKWO
сообщение Mar 31 2008, 10:23
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Добрый день!
Столкнулся со следующей проблемой.
нашол код как сделать восемь таймеров написанный Alechin Jan.
Первое что кидается в глаза та это синтаксис мне непонятный.
Вот к примеру прототип функции остановки тай мера:
Код
void Stop_Timer(IN IDX timer);

ну и сама функция:
Код
/*--------------------------------------------------------------------------------------------*/
/* Процедура остановки таймера.                                                               */
/* Принимает:   номер таймера (0 - 7).                                                        */
/* Возвращает:  ничего не возвращает.                                                         */
/*--------------------------------------------------------------------------------------------*/
__monitor void Stop_Timer(IN IDX timer)
{
  Timer[timer].Timer_Ena = TIMER_DIS;
  return;
}

Непонятно что такое IDX? Ну IN понятно, направление, очень удобно.
IDX по ходу здесь беззнаковый чар.
Ну и соответственно вопрос:
Этот синтаксис возможен через какоето макроопределение?
Может кто знает, подскажите, уверен это интерессно не только мне.
Вот ещё пример
Код
void Start_Timer(IN IDX timer, IN WORD interval, IN pTIMER_FUNC pFunc = NULL, IN bool cycle = TIMER_ONCE);

Спасибо.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Apr 2 2008, 18:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Вот об этом я и говорю - богатство выбора в рамках языка.

При написании сложных операторов с большим количеством операций по типу ++/-- могут быть грабли. Они достаточно подробно описаны даже в учебниках. Но, как мне кажется, не стоит перегружать операторы. Это неудобно для отладки к примеру и ухудшает читаемость. С другой стороны, совершенно очевидно, что компилятору по барабану написали ли вы формулу одним оператором или тремя. Качество сгенерированного кода не ухудшится
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2008, 19:30
Сообщение #3


Гуру
******

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



Цитата(SasaVitebsk @ Apr 2 2008, 21:34) *
... совершенно очевидно, что компилятору по барабану написали ли вы формулу одним оператором или тремя. Качество сгенерированного кода не ухудшится

Компиляторы умнеют, но тем не менее пока не умнее Вас и на подсказку вполне вероятно, ответят лучшим кодом.


Цитата(singlskv @ Apr 2 2008, 22:19) *
Более того, при написании 3мя операторами оно может и существенно улучшиться 07.gif
если знаешь как правильно разбить эти 3 оператора на нужное количество строк...

Вы знаете? Тогда пример в студию......

Цитата(_Pasha @ Apr 2 2008, 21:53) *
Поэтому, когда мне закинут в уши мысль типа...

smile.gif ну зачем-же гордится своей наивностью?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 2 2008, 20:31
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Apr 2 2008, 23:30) *
Вы знаете? Тогда пример в студию......
Да пожалуйста, WinAvr20060421, на IAR тоже как-то проверял, чуть получше но тоже не блеск:
Код
#include <avr/io.h>

volatile unsigned char al=0xFF;
volatile unsigned char ah=0xFF;
volatile unsigned char Pb,Pc,Pd;

int main()
{
  unsigned char pb,pc,pd;

  unsigned char tmpl = al;
  unsigned char tmph = ah;

//------------ Вариант N1 ("правильный")
  pb = (tmph & 0b10000000) | ((tmph & 0b01110000) >> 1) | ((tmph & 0b00001100) >> 2);
  pc = ((tmph & 0b00000011) << 2) | ((tmpl & 0b11000000) >> 6);
  pd = tmpl <<2;
//----- сохраняем результат
  Pb = pb;
  Pc = pc;
  Pd = pd;


  tmpl = al;
  tmph = ah;

//------------ Вариант N2 ("неправильный :) ")
  pd = (tmpl << 2);
  pc = tmph & 0b01111100;
  pc >>= 1;
  pb = (tmph & 0b10000000);
  pb |= (pc & 0b00111000);
  pc &= 0b00000110;
  pc >>= 1;
  pb |= pc;
  pc = (tmph&0b00000011);
  pc <<= 2;
  pd = tmpl >> 6;
  pc |= pd;
  pd = tmpl << 2;
//----- сохраняем результат
  Pb = pb;
  Pc = pc;
  Pd = pd;

//---------------------------

  while (1);

}

результат компиляции:
Код
pb = (tmph & 0b10000000) | ((tmph & 0b01110000) >> 1) | ((tmph & 0b00001100) >> 2);
  6c:    24 2f           mov    r18, r20
  6e:    33 27           eor    r19, r19
  70:    c9 01           movw    r24, r18
  72:    80 77           andi    r24, 0x70; 112
  74:    90 70           andi    r25, 0x00; 0
  76:    95 95           asr    r25
  78:    87 95           ror    r24
  7a:    40 78           andi    r20, 0x80; 128
  7c:    48 2b           or    r20, r24
  7e:    c9 01           movw    r24, r18
  80:    8c 70           andi    r24, 0x0C; 12
  82:    90 70           andi    r25, 0x00; 0
  84:    95 95           asr    r25
  86:    87 95           ror    r24
  88:    95 95           asr    r25
  8a:    87 95           ror    r24
  8c:    48 2b           or    r20, r24
  pc = ((tmph & 0b00000011) << 2) | ((tmpl & 0b11000000) >> 6);
  8e:    23 70           andi    r18, 0x03; 3
  90:    30 70           andi    r19, 0x00; 0
  92:    22 0f           add    r18, r18
  94:    33 1f           adc    r19, r19
  96:    22 0f           add    r18, r18
  98:    33 1f           adc    r19, r19
  9a:    85 2f           mov    r24, r21
  9c:    99 27           eor    r25, r25
  9e:    36 e0           ldi    r19, 0x06; 6
  a0:    96 95           lsr    r25
  a2:    87 95           ror    r24
  a4:    3a 95           dec    r19
  a6:    e1 f7           brne    .-8      ; 0xa0 <main+0x44>
  a8:    28 2b           or    r18, r24
  pd = tmpl <<2;
  aa:    55 0f           add    r21, r21
  ac:    55 0f           add    r21, r21

Код
  pd = (tmpl << 2);
  pc = tmph & 0b01111100;
  c2:    24 2f           mov    r18, r20
  c4:    2c 77           andi    r18, 0x7C; 124
  pc >>= 1;
  c6:    26 95           lsr    r18
  pb = (tmph & 0b10000000);
  c8:    94 2f           mov    r25, r20
  ca:    90 78           andi    r25, 0x80; 128
  pb |= (pc & 0b00111000);
  cc:    82 2f           mov    r24, r18
  ce:    88 73           andi    r24, 0x38; 56
  d0:    98 2b           or    r25, r24
  pc &= 0b00000110;
  d2:    26 70           andi    r18, 0x06; 6
  pc >>= 1;
  d4:    26 95           lsr    r18
  pb |= pc;
  d6:    92 2b           or    r25, r18
  pc = (tmph&0b00000011);
  d8:    24 2f           mov    r18, r20
  da:    23 70           andi    r18, 0x03; 3
  pc <<= 2;
  dc:    22 0f           add    r18, r18
  de:    22 0f           add    r18, r18
  pd = tmpl >> 6;
  e0:    85 2f           mov    r24, r21
  e2:    82 95           swap    r24
  e4:    86 95           lsr    r24
  e6:    86 95           lsr    r24
  e8:    83 70           andi    r24, 0x03; 3
  pc |= pd;
  ea:    28 2b           or    r18, r24
  pd = tmpl << 2;
  ec:    55 0f           add    r21, r21
  ee:    55 0f           add    r21, r21


ИТОГО:
"Правильный" 21 слов 58 тактов
"Неправильный" 17 слов 23 такта

Выводы делаем сами 07.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2008, 21:51
Сообщение #5


Гуру
******

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



Цитата(singlskv @ Apr 2 2008, 23:31) *
Да пожалуйста, WinAvr20060421, на IAR тоже как-то проверял, чуть получше но тоже не блеск:

Ну и где обещанная экономия от
Цитата
...правильно разбить эти 3 оператора на нужное количество строк...

Налицо ДВА РАЗНЫХ АЛГОРИТМА, а не описание одного и того-же "разным количеством строк".
Кроме того, посмею предположить, что под нормально оптимизирующим компилятором разница будет в пару команд максимум.
Цитата
Выводы делаем сами

Сделал smile.gif



Цитата(AlexKLm @ Apr 3 2008, 00:22) *
Мне нравится стиль Microsoft, лучше трудно придумать.

Трудно придумать стиль в котором больше жертв принесено стилю ради собственно абсолютно формального стиля.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sKWO   Стиль программирования на Си   Mar 31 2008, 10:23
- - Axxel   Цитата(sKWO @ Mar 31 2008, 16:23) Этот си...   Mar 31 2008, 10:36
|- - aaarrr   Стиль жуткий, не надо так делать. Цитата(Axxel ...   Mar 31 2008, 10:40
- - defunct   ЦитатаЭтот синтаксис возможен через какоето макроо...   Mar 31 2008, 10:59
|- - sKWO   Цитата(defunct @ Mar 31 2008, 14:59) да, ...   Mar 31 2008, 11:56
|- - dxp   Цитата(sKWO @ Mar 31 2008, 18:56) Да, тог...   Mar 31 2008, 12:16
|- - defunct   Цитата(sKWO @ Mar 31 2008, 13:56) Чёта му...   Mar 31 2008, 14:17
|- - Axxel   Цитата(sKWO @ Mar 31 2008, 17:56) ПОКАЖИ ...   Apr 1 2008, 04:30
- - sensor_ua   ЦитатаВо всех случаях, где можно выбирать, предпоч...   Mar 31 2008, 12:48
|- - rezident   Извиняюсь, что вклиниваюсь. Цитата(sensor_ua ...   Mar 31 2008, 14:13
|- - dxp   Цитата(sensor_ua @ Mar 31 2008, 19:48) Пр...   Apr 1 2008, 03:41
- - Alechin   Так как кусок кода мой - скажу как это описано у м...   Mar 31 2008, 14:08
- - sensor_ua   ЦитатаДля переносимости кода.... IMNHO, совсем неу...   Mar 31 2008, 14:39
|- - rezident   Цитата(sensor_ua @ Mar 31 2008, 20:39) IM...   Mar 31 2008, 14:51
- - vshemm   Есть замечательная книга Алена Голуба "Правил...   Mar 31 2008, 15:08
- - sensor_ua   ЦитатаУже были и неоднократно пояснения почему typ...   Mar 31 2008, 15:23
|- - sKWO   Спасибо, Ребята! Дисскусия разворачивается хор...   Mar 31 2008, 16:51
- - sensor_ua   Попробуй таки найти текстовым поиском "#defin...   Mar 31 2008, 17:10
|- - rezident   Цитата(sensor_ua @ Mar 31 2008, 23:10) По...   Mar 31 2008, 17:12
- - sensor_ua   ЦитатаА вот на такое безобразие препроцессор сруга...   Mar 31 2008, 17:26
|- - rezident   Цитата(sensor_ua @ Mar 31 2008, 23:26) А ...   Mar 31 2008, 18:49
- - sensor_ua   Гы Мне код перебивать не нужно. Мне как раз единож...   Mar 31 2008, 19:07
- - Lem   препроцессором не рекомендуется пользоваться именн...   Mar 31 2008, 20:08
|- - ReAl   Цитата(Lem @ Mar 31 2008, 22:08) как во ч...   Apr 1 2008, 12:40
|- - dxp   Цитата(ReAl @ Apr 1 2008, 19:40) Как прав...   Apr 1 2008, 13:50
|- - Сергей Борщ   Цитата(dxp @ Apr 1 2008, 16:50) Осталось ...   Apr 1 2008, 14:43
|- - ReAl   Цитата(dxp @ Apr 1 2008, 15:50) Это где т...   Apr 1 2008, 14:51
|- - zltigo   Цитата(dxp @ Apr 1 2008, 16:50) А вот в и...   Apr 1 2008, 20:44
|- - SasaVitebsk   Цитата(zltigo @ Apr 2 2008, 00:44) Рекоме...   Apr 1 2008, 22:17
||- - _Pasha   Цитата(SasaVitebsk @ Apr 2 2008, 01:17) П...   Apr 2 2008, 06:58
|- - ReAl   Цитата(zltigo @ Apr 1 2008, 22:44) Самост...   Apr 2 2008, 11:55
|- - defunct   Цитата(ReAl @ Apr 2 2008, 13:55) Шаманим...   Apr 2 2008, 12:15
||- - ReAl   Цитата(defunct @ Apr 2 2008, 14:15) Это я...   Apr 2 2008, 12:40
||- - defunct   Цитата(ReAl @ Apr 2 2008, 14:40) Фух, а т...   Apr 2 2008, 12:43
||- - _Pasha   Цитата(ReAl @ Apr 2 2008, 15:40) ...спосо...   Apr 2 2008, 18:53
|- - zltigo   Цитата(ReAl @ Apr 2 2008, 14:55) По повод...   Apr 2 2008, 15:01
|- - sKWO   Позволю небольшой отрывок кода, извиняюсь что немн...   Apr 2 2008, 16:40
- - sensor_ua   Цитатапрепроцессором не рекомендуется пользоваться...   Mar 31 2008, 20:29
- - _Pasha   Цитата(vshemm @ Mar 31 2008, 19:08) Так т...   Mar 31 2008, 22:07
- - sensor_ua   ЦитатаУже неоднократно на эту тему проходились, по...   Apr 1 2008, 05:53
|- - Dog Pawlowa   Цитата(sensor_ua @ Apr 1 2008, 08:53) Про...   Apr 1 2008, 06:30
|- - dxp   Цитата(sensor_ua @ Apr 1 2008, 12:53) А в...   Apr 1 2008, 07:01
- - _Pasha   Пример winavr Кодeeprom_read_block(&my_var...   Apr 1 2008, 06:16
- - _Pasha   Цитата(sensor_ua @ Apr 1 2008, 09:53) К с...   Apr 1 2008, 06:33
- - sensor_ua   ЦитатаНо это, повторяю, другое Дальше бессмысленно...   Apr 1 2008, 08:17
|- - dxp   Цитата(sensor_ua @ Apr 1 2008, 15:17) Дал...   Apr 1 2008, 09:28
- - SasaVitebsk   Очень интересная дискуссия развернулась. Но, в общ...   Apr 1 2008, 12:48
|- - dxp   Цитата(SasaVitebsk @ Apr 1 2008, 19:48) Н...   Apr 1 2008, 13:11
||- - ReAl   Цитата(dxp @ Apr 1 2008, 15:11) Во всяком...   Apr 1 2008, 13:40
||- - defunct   Цитата(ReAl @ Apr 1 2008, 15:40) Но ведь ...   Apr 2 2008, 09:58
||- - andrew_b   Цитата(defunct @ Apr 2 2008, 12:58) Delph...   Apr 2 2008, 10:15
||- - Сергей Борщ   Цитата(defunct @ Apr 2 2008, 12:58) Прост...   Apr 2 2008, 12:34
||- - defunct   Цитата(Сергей Борщ @ Apr 2 2008, 14:34) Н...   Apr 2 2008, 12:39
|- - Сергей Борщ   Цитата(SasaVitebsk @ Apr 1 2008, 15:48) К...   Apr 1 2008, 13:15
- - Lem   одним из авторитетов для меня является Герб Саттер...   Apr 1 2008, 13:07
- - sensor_ua   ЦитатаНе следует путать приятное с полезным... Не ...   Apr 1 2008, 13:37
|- - singlskv   Цитата(SasaVitebsk @ Apr 2 2008, 22:34) С...   Apr 2 2008, 19:19
||- - singlskv   Цитата(zltigo @ Apr 3 2008, 01:47) Налицо...   Apr 2 2008, 21:55
||- - zltigo   Цитата(singlskv @ Apr 3 2008, 00:55) пока...   Apr 2 2008, 22:08
|||- - singlskv   Цитата(zltigo @ Apr 3 2008, 02:08) и убра...   Apr 2 2008, 22:37
|||- - ReAl   Цитата(singlskv @ Apr 3 2008, 00:37) Я же...   Apr 2 2008, 22:46
||||- - singlskv   Цитата(ReAl @ Apr 3 2008, 02:32) Кстати, ...   Apr 2 2008, 23:25
||||- - ReAl   Цитата(singlskv @ Apr 3 2008, 00:55) Так ...   Apr 2 2008, 23:45
||||- - defunct   Цитата(ReAl @ Apr 3 2008, 01:45) Кстати, ...   Apr 3 2008, 10:22
|||- - zltigo   Цитата(singlskv @ Apr 3 2008, 01:37) это ...   Apr 3 2008, 05:53
||- - ReAl   Цитата(singlskv @ Apr 2 2008, 23:55) с ОД...   Apr 2 2008, 22:32
|- - sKWO   Цитата(zltigo @ Apr 2 2008, 22:30) Компил...   Apr 7 2008, 10:40
|- - ReAl   Цитата(sKWO @ Apr 7 2008, 13:40) К пример...   Apr 7 2008, 19:43
|- - sKWO   Цитата(ReAl @ Apr 7 2008, 22:43) Называет...   Apr 8 2008, 11:00
- - SasaVitebsk   Хотя я в NASA не работал, но по слухам там не прим...   Apr 2 2008, 19:53
- - AlexKLm   На СИ, правильно когда по-больше зелени (#define),...   Apr 2 2008, 21:22
- - SasaVitebsk   Вот я и говорю, что результат практически тот же п...   Apr 3 2008, 07:23
|- - ReAl   Цитата(SasaVitebsk @ Apr 3 2008, 09:23) В...   Apr 3 2008, 08:28
- - _Pasha   Кто о чем, а вшивый - о бане... Пробегала книжка ...   Apr 3 2008, 12:57
- - sensor_ua   Цитатасредствами ИАР это дело обстоит намного прощ...   Apr 7 2008, 10:58
|- - sKWO   Цитата(sensor_ua @ Apr 7 2008, 13:58) А к...   Apr 7 2008, 11:07
- - sensor_ua   Не очень понял, что Вы хотите, но на телесистемах ...   Apr 7 2008, 12:51
- - sKWO   спасибо за инфу!!   Apr 7 2008, 17:49


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

 


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


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