Цитата(Aesthete Animus @ Jan 4 2008, 23:44)

..написан он надо сказать изящно.
Он не написан изящно - вполне лобовой естественный код. Писался без раздумий. Просто без путанных избыточных конструкций.
Цитата
Даже в данном случае, проще понять что происходит у меня в коде, нежели у Вас.
Вы очень заблуждаетесь. Я потратил на обозрение кода в той ветке достаточно много времени (много больше, чем на написание более простого) пытаясь вникнуть в суть. Компилятор тоже Вас плохо понял - сравниваем:
Код
132 char* bitwise(unsigned long word, char* dest, unsigned char length)
\ bitwise:
133 {
\ 00000000 93BA ST -Y, R27
\ 00000002 2E3A MOV R3, R26
\ 00000004 2F79 MOV R23, R25
\ 00000006 2E28 MOV R2, R24
\ 00000008 01C8 MOVW R25:R24, R17:R16
\ 0000000A 01D9 MOVW R27:R26, R19:R18
\ 0000000C 010A MOVW R1:R0, R21:R20
134 register unsigned char i;
135 for (i = 0; i < length; i++)
\ 0000000E E050 LDI R21, 0
\ 00000010 2366 TST R22
\ 00000012 F0D9 BREQ ??bitwise_0
\ 00000014 01F0 MOVW R31:R30, R1:R0
\ 00000016 0FE6 ADD R30, R22
\ 00000018 1FF5 ADC R31, R21
\ 0000001A 9731 SBIW R31:R30, 1
136 dest[length - i - 1] = word & (1UL << i) ? '1' : '0';
\ ??bitwise_1:
\ 0000001C E001 LDI R16, 1
\ 0000001E E010 LDI R17, 0
\ 00000020 E020 LDI R18, 0
\ 00000022 E030 LDI R19, 0
\ 00000024 2F45 MOV R20, R21
\ 00000026 ........ CALL ?L_SHL_L03
\ 0000002A 2308 AND R16, R24
\ 0000002C 2319 AND R17, R25
\ 0000002E 232A AND R18, R26
\ 00000030 233B AND R19, R27
\ 00000032 2B01 OR R16, R17
\ 00000034 2B02 OR R16, R18
\ 00000036 2B03 OR R16, R19
\ 00000038 F011 BREQ ??bitwise_2
\ 0000003A E301 LDI R16, 49
\ 0000003C C001 RJMP ??bitwise_3
\ ??bitwise_2:
\ 0000003E E300 LDI R16, 48
\ ??bitwise_3:
\ 00000040 8300 ST Z, R16
\ 00000042 9553 INC R21
\ 00000044 9731 SBIW R31:R30, 1
\ 00000046 1756 CP R21, R22
\ 00000048 F348 BRCS ??bitwise_1
137 dest[length] = '\0';
\ ??bitwise_0:
\ 0000004A E000 LDI R16, 0
\ 0000004C 01F0 MOVW R31:R30, R1:R0
\ 0000004E 0FE6 ADD R30, R22
\ 00000050 1FF0 ADC R31, R16
\ 00000052 8300 ST Z, R16
138 return dest;
\ 00000054 0180 MOVW R17:R16, R1:R0
\ 00000056 2D82 MOV R24, R2
\ 00000058 2F97 MOV R25, R23
\ 0000005A 2DA3 MOV R26, R3
\ 0000005C 91B9 LD R27, Y+
\ 0000005E 9508 RET
139 }
и вполне понятный мне и много более понятный компилятору код:
Код
143 char* bw(unsigned long word, char* dest, char length)
\ bw:
144 {
145 dest += length;
\ 00000000 E070 LDI R23, 0
\ 00000002 0F46 ADD R20, R22
\ 00000004 1F57 ADC R21, R23
146 *dest = '\0';
\ 00000006 01FA MOVW R31:R30, R21:R20
\ 00000008 8370 ST Z, R23
\ 0000000A 2366 TST R22
\ 0000000C F069 BREQ ??bw_0
\ ??bw_1:
\ 0000000E 956A DEC R22
147 while( length-- )
148 { *--dest = (word & 1) + '0';
\ 00000010 2F70 MOV R23, R16
\ 00000012 7071 ANDI R23, 0x01
\ 00000014 5D70 SUBI R23, 208
\ 00000016 01FA MOVW R31:R30, R21:R20
\ 00000018 9372 ST -Z, R23
\ 0000001A 01AF MOVW R21:R20, R31:R30
149 word >>= 1;
\ 0000001C 9536 LSR R19
\ 0000001E 9527 ROR R18
\ 00000020 9517 ROR R17
\ 00000022 9507 ROR R16
150 }
\ 00000024 2366 TST R22
\ 00000026 F799 BRNE ??bw_1
151 return( dest );
\ ??bw_0:
\ 00000028 018A MOVW R17:R16, R21:R20
\ 0000002A 9508 RET
152 }
Разница отнюдь не в поминаемые "несколько тактов" и даже не десятков тактов.
Цитата
Я противник запутанных выражений...
В оценке степени запутанности мы с компилятором и Вы диаметрально расходимся

Цитата
..а возможно, следует пересмотреть всю архитектуру системы.
Слова, слова, слова,...
правильные слова. Плохо, когда даже правильными словами начинают манипулировать.
Цитата
Кстати, эту фукнцию я приводил в теме, до конца тему не прочитав и не поняв сути. За то прошу меня простить.
Это не принципиально - я совсем мельком взглянул на ту тему и зацепившись взглядом за
непонятное было подумал, что есть что-то интересное.....
Цитата
Я к примеру никогда не использую ресурсы контроллера более чем на 20 процентов (за исключением SRAM`ма) и не советую эту цифру поднимать выше 80 процентов.
Ресурсов контроллера должно хватать для обеспечения функционирования критических задач при пиковой нагрузке. Все остальные при этом могут и подождать и/или иметь допустимые потери в обслуживании.
А почему для SRAM сделано исключение зачем-то?

Гулять, так гулять!
Если системе оставляют 80% на "всякий случай", то это свидетельстует об одном - разработчик так-же, как и в лучае инициализации на "всякий случай" чего не поподя (с чего эта ветка и началась) не имеет твердого понятия о том, что делает. Вот такое закономерное

движение от непонимания-неуверенности в простом к непониманию-неуверенности в сложном

.
Цитата
Если система перестает работать из-за паразитной задержки в несколько тактов, то эта система "жесткая" и ее стоит изменить.
Об использовании совершенно
правильных слов уже писал выше.