|
Стиль программирования на Си, описание функции |
|
|
|
Mar 31 2008, 10:23
|

Местный
  
Группа: Участник
Сообщений: 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); Спасибо.
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
 |
Ответов
|
Apr 2 2008, 19:30
|

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

|
Цитата(SasaVitebsk @ Apr 2 2008, 21:34)  ... совершенно очевидно, что компилятору по барабану написали ли вы формулу одним оператором или тремя. Качество сгенерированного кода не ухудшится Компиляторы умнеют, но тем не менее пока не умнее Вас и на подсказку вполне вероятно, ответят лучшим кодом. Цитата(singlskv @ Apr 2 2008, 22:19)  Более того, при написании 3мя операторами оно может и существенно улучшиться  если знаешь как правильно разбить эти 3 оператора на нужное количество строк... Вы знаете? Тогда пример в студию...... Цитата(_Pasha @ Apr 2 2008, 21:53)  Поэтому, когда мне закинут в уши мысль типа...  ну зачем-же гордится своей наивностью?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 2 2008, 20:31
|
дятел
    
Группа: Свой
Сообщений: 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 такта Выводы делаем сами
|
|
|
|
|
Apr 2 2008, 21:51
|

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

|
Цитата(singlskv @ Apr 2 2008, 23:31)  Да пожалуйста, WinAvr20060421, на IAR тоже как-то проверял, чуть получше но тоже не блеск: Ну и где обещанная экономия от Цитата ...правильно разбить эти 3 оператора на нужное количество строк... Налицо ДВА РАЗНЫХ АЛГОРИТМА, а не описание одного и того-же "разным количеством строк". Кроме того, посмею предположить, что под нормально оптимизирующим компилятором разница будет в пару команд максимум. Цитата Выводы делаем сами Сделал  Цитата(AlexKLm @ Apr 3 2008, 00:22)  Мне нравится стиль Microsoft, лучше трудно придумать. Трудно придумать стиль в котором больше жертв принесено стилю ради собственно абсолютно формального стиля.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|