|
Ещё раз о бутлоадере, Некоторые тонкости. |
|
|
|
 |
Ответов
|
Oct 19 2007, 15:08
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Непомнящий Евгений @ Oct 19 2007, 11:37)  Т.е., на 12 лишних байт вы соптимизировали  Мораль сей басни - оптимизировать низкоуровневые вещи должен компилятор, ему то в 95% случаев надо эту оптимизацию и доверить... Цитата(Непомнящий Евгений @ Oct 19 2007, 12:33)  Если максимальная оптимизация по размеру, то первый вариант весит 312 байт, второй - 192. Тут действительно вылезают обещанные singlskv 120 байт. А осадок то остался... © (не мой)  На самом деле в первом варианте "по скорости", IAR просто переклинило по какой-то только ему ведомой причине. Так иногда бывает с компиляторами.
|
|
|
|
|
Oct 21 2007, 17:28
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(SasaVitebsk @ Oct 21 2007, 00:07)  По сравнению с вариантом от Сергей Борщ, любезно им предоставленном мне, проигрыш вашего варианта оптимизации на этой подпрограмме составил 26 байт. Хотя честно говоря я не понимаю почему. Я оптимизировал прерывания примерно вашим способом. Видимо знаний компилятора недостаточно. Мой вариант, это еще был не "мой" вариант, к реальной оптимизации я просто не приступал так, показал направление .... Вам нравится IAR ? Хорошо, будет для IAR: Код 143 144 __z void InvMixColumn1( byte * column ,byte bpoly_); 145
\ In segment CODE, align 2, keep-with-next 146 __z void InvMixColumn(byte *column) \ InvMixColumn: 147 { 148 InvMixColumn1( column ,BPOLY); \ 00000000 E10B LDI R16, 27 \ 00000002 REQUIRE InvMixColumn1 \ 00000002 ; // Fall through to label InvMixColumn1 149 }
\ In segment CODE, align 2, keep-with-next 150 __z void InvMixColumn1( byte * column ,byte bpoly) \ InvMixColumn1: 151 { 152 byte r0, r1, r2, r3; 153 byte co0 = column[0],co1=column[1],co2=column[2],co3=column[3]; \ 00000000 8110 LD R17, Z \ 00000002 8121 LDD R18, Z+1 \ 00000004 8132 LDD R19, Z+2 \ 00000006 8143 LDD R20, Z+3 154 byte tmp; 155 156 r0 = co1 ^ co2 ^ co3; \ 00000008 2F53 MOV R21, R19 \ 0000000A 2752 EOR R21, R18 \ 0000000C 2754 EOR R21, R20 157 r1 = co0 ^ co2 ^ co3; \ 0000000E 2F63 MOV R22, R19 \ 00000010 2761 EOR R22, R17 \ 00000012 2764 EOR R22, R20 158 tmp = r0 ^ r1; \ 00000014 2F76 MOV R23, R22 \ 00000016 2775 EOR R23, R21 159 r2 = tmp ^ co3; \ 00000018 2E04 MOV R0, R20 \ 0000001A 2607 EOR R0, R23 160 r3 = tmp ^ co2; \ 0000001C 2E13 MOV R1, R19 \ 0000001E .... RCALL ?Subroutine0 161 162 co0 = (tmp=co0) << 1; 163 if ((tmp & 0x80)==0x80) co0 ^= bpoly; 164 co1 = (tmp=co1) << 1; 165 if ((tmp & 0x80)==0x80) co1 ^= bpoly; 166 co2 = (tmp=co2) << 1; 167 if ((tmp & 0x80)==0x80) co2 ^= bpoly; 168 co3 = (tmp=co3) << 1; 169 if ((tmp & 0x80)==0x80) co3 ^= bpoly; 170 171 r0 ^= co0 ^ co1; \ ??CrossCallReturnLabel_0: \ 00000020 2F72 MOV R23, R18 \ 00000022 2771 EOR R23, R17 \ 00000024 2757 EOR R21, R23 172 r1 ^= co1 ^ co2; \ 00000026 2F73 MOV R23, R19 \ 00000028 2772 EOR R23, R18 \ 0000002A 2767 EOR R22, R23 173 r2 ^= co2 ^ co3; \ 0000002C 2F74 MOV R23, R20 \ 0000002E 2773 EOR R23, R19 \ 00000030 2607 EOR R0, R23 174 r3 ^= co0 ^ co3; \ 00000032 2F74 MOV R23, R20 \ 00000034 2771 EOR R23, R17 \ 00000036 .... RCALL ?Subroutine0 175 176 co0 = (tmp=co0) << 1; 177 if ((tmp & 0x80)==0x80) co0 ^= bpoly; 178 co1 = (tmp=co1) << 1; 179 if ((tmp & 0x80)==0x80) co1 ^= bpoly; 180 co2 = (tmp=co2) << 1; 181 if ((tmp & 0x80)==0x80) co2 ^= bpoly; 182 co3 = (tmp=co3) << 1; 183 if ((tmp & 0x80)==0x80) co3 ^= bpoly; 184 185 r0 ^= co0 ^ co2; \ ??CrossCallReturnLabel_1: \ 00000038 2F73 MOV R23, R19 \ 0000003A 2771 EOR R23, R17 \ 0000003C 2757 EOR R21, R23 186 r1 ^= co1 ^ co3; \ 0000003E 2F74 MOV R23, R20 \ 00000040 2772 EOR R23, R18 \ 00000042 2767 EOR R22, R23 187 r2 ^= co0 ^ co2; \ 00000044 2F73 MOV R23, R19 \ 00000046 2771 EOR R23, R17 \ 00000048 2607 EOR R0, R23 188 r3 ^= co1 ^ co3; \ 0000004A 2F74 MOV R23, R20 \ 0000004C 2772 EOR R23, R18 \ 0000004E .... RCALL ?Subroutine0 189 190 co0 = (tmp=co0) << 1; 191 if ((tmp & 0x80)==0x80) co0 ^= bpoly; 192 co1 = (tmp=co1) << 1; 193 if ((tmp & 0x80)==0x80) co1 ^= bpoly; 194 co2 = (tmp=co2) << 1; 195 if ((tmp & 0x80)==0x80) co2 ^= bpoly; 196 co3 = (tmp=co3) << 1; 197 if ((tmp & 0x80)==0x80) co3 ^= bpoly; 198 199 tmp=co0 ^ co1 ^ co2 ^ co3; \ ??CrossCallReturnLabel_2: \ 00000050 2721 EOR R18, R17 \ 00000052 2723 EOR R18, R19 \ 00000054 2724 EOR R18, R20 200 201 column[0] = tmp ^ r0; \ 00000056 2752 EOR R21, R18 \ 00000058 8350 ST Z, R21 202 column[1] = tmp ^ r1; \ 0000005A 2762 EOR R22, R18 \ 0000005C 8361 STD Z+1, R22 203 column[2] = tmp ^ r2; \ 0000005E 2602 EOR R0, R18 \ 00000060 8202 STD Z+2, R0 204 column[3] = tmp ^ r3; \ 00000062 2612 EOR R1, R18 \ 00000064 8213 STD Z+3, R1 205 } \ 00000066 9508 RET
\ In segment CODE, align 2, keep-with-next \ ?Subroutine0: \ 00000000 2617 EOR R1, R23 \ 00000002 2F71 MOV R23, R17 \ 00000004 0F11 LSL R17 \ 00000006 FB77 BST R23, 7 \ 00000008 F40E BRTC ??Subroutine0_0 \ 0000000A 2710 EOR R17, R16 \ ??Subroutine0_0: \ 0000000C 2F72 MOV R23, R18 \ 0000000E 0F22 LSL R18 \ 00000010 FB77 BST R23, 7 \ 00000012 F40E BRTC ??Subroutine0_1 \ 00000014 2720 EOR R18, R16 \ ??Subroutine0_1: \ 00000016 2F73 MOV R23, R19 \ 00000018 0F33 LSL R19 \ 0000001A FB77 BST R23, 7 \ 0000001C F40E BRTC ??Subroutine0_2 \ 0000001E 2730 EOR R19, R16 \ ??Subroutine0_2: \ 00000020 2F74 MOV R23, R20 \ 00000022 0F44 LSL R20 \ 00000024 FB77 BST R23, 7 \ 00000026 F40E BRTC ??Subroutine0_3 \ 00000028 2740 EOR R20, R16 \ ??Subroutine0_3: \ 0000002A 9508 RET ИТОГО: 150 байтов программного кода (уже в 2 раза лучше чем оригинал  ) И если еще чуть напрячь мозг, то можно на 20-30 байт сократить...
|
|
|
|
|
Oct 22 2007, 15:24
|
Участник

Группа: Новичок
Сообщений: 18
Регистрация: 16-02-07
Пользователь №: 25 414

|
Цитата(singlskv @ Oct 21 2007, 21:28)  __z void InvMixColumn(...) Поясните, пожалуйста, назначение "__z" (и источник информации) - в описании на компилятор 4.30A("Help>AVR>AVR C/C++ Compiler Reference Guide")не нашёл ничего подобного. Без использования "__z"код "прибавляет в весе" 4 байта.
|
|
|
|
Сообщений в этой теме
SasaVitebsk Ещё раз о бутлоадере Oct 4 2007, 09:17 Сергей Борщ Цитата(SasaVitebsk @ Oct 4 2007, 12:17) Х... Oct 4 2007, 09:37 IJAR Цитата(Сергей Борщ @ Oct 4 2007, 13:37) Е... Oct 9 2007, 11:40  Сергей Борщ Цитата(IJAR @ Oct 9 2007, 14:40) А какой ... Oct 9 2007, 12:01   IJAR Цитата(Сергей Борщ @ Oct 9 2007, 16:01) Ч... Oct 9 2007, 12:33    Сергей Борщ Цитата(IJAR @ Oct 9 2007, 15:33) Но есть ... Oct 9 2007, 14:33 SasaVitebsk Спасибо Сергей. Всё доступно объяснил. Подходят о... Oct 4 2007, 19:14 arttab а почему бы не объявить переменную в озу в загрузч... Oct 7 2007, 14:34 Сергей Борщ Цитата(arttab @ Oct 7 2007, 17:34) В загр... Oct 8 2007, 08:16 IJAR Цитата(SasaVitebsk @ Oct 4 2007, 13:17) З... Oct 9 2007, 07:28 Сергей Борщ Цитата(IJAR @ Oct 9 2007, 10:28) 1. Испол... Oct 9 2007, 10:45 SasaVitebsk Сергей, всётаки по коду не уложился в 2к. Со своим... Oct 9 2007, 23:55 Сергей Борщ Цитата(SasaVitebsk @ Oct 10 2007, 02:55) ... Oct 10 2007, 10:58  SasaVitebsk Цитата(Сергей Борщ @ Oct 10 2007, 13:58) ... Oct 10 2007, 13:35   Сергей Борщ Цитата(SasaVitebsk @ Oct 10 2007, 16:35) ... Oct 10 2007, 15:46    Dog Pawlowa Цитата(Сергей Борщ @ Oct 10 2007, 18:46) ... Oct 10 2007, 16:42     Сергей Борщ Цитата(Dog Pawlowa @ Oct 10 2007, 19:42) ... Oct 10 2007, 16:57   singlskv Цитата(SasaVitebsk @ Oct 10 2007, 17:35) ... Oct 16 2007, 18:01    Сергей Борщ Цитата(singlskv @ Oct 16 2007, 21:01) Ста... Oct 17 2007, 09:56 SasaVitebsk Код
2 106 bytes of CODE memory
1 430 bytes of D... Oct 11 2007, 09:07 Waso Извиняюсь что лезу в чужую тему, но есть дилетантс... Oct 12 2007, 08:36 Сергей Борщ Цитата(Waso @ Oct 12 2007, 11:36) Я плани... Oct 12 2007, 11:04 Waso Спасибо за совет!
Нашел апноты. Изучаю.
Safe ... Oct 15 2007, 07:02 SasaVitebsk Ещё один вопрос, напрямую с бутлоадером не связанн... Oct 16 2007, 10:28 Сергей Борщ Цитата(SasaVitebsk @ Oct 16 2007, 13:28) ... Oct 16 2007, 12:51  IgorKossak Цитата(Сергей Борщ @ Oct 16 2007, 15:51) ... Oct 16 2007, 20:32 SasaVitebsk Спасибо, но я не планирую запрещать локи на чтение... Oct 16 2007, 16:47 SasaVitebsk 2 singlskv. Не планирую переходить на GCC. Работы ... Oct 16 2007, 20:58 singlskv Цитата(SasaVitebsk @ Oct 17 2007, 00:58) ... Oct 17 2007, 20:29  zltigo Цитата(singlskv @ Oct 17 2007, 23:29) то ... Oct 17 2007, 20:47   singlskv Цитата(zltigo @ Oct 18 2007, 00:47) Т.е. ... Oct 17 2007, 20:57    zltigo Цитата(singlskv @ Oct 17 2007, 23:57) Опя... Oct 17 2007, 21:12     singlskv Цитата(zltigo @ Oct 18 2007, 01:12) Конте... Oct 17 2007, 21:53      zltigo Цитата(singlskv @ Oct 18 2007, 00:53) Ско... Oct 17 2007, 22:04       singlskv Цитата(zltigo @ Oct 18 2007, 02:04) Легко... Oct 17 2007, 22:24        zltigo Цитата(singlskv @ Oct 18 2007, 01:24) а п... Oct 17 2007, 22:35         singlskv Цитата(zltigo @ Oct 18 2007, 02:35) В aes... Oct 17 2007, 22:55  SasaVitebsk Цитата(singlskv @ Oct 17 2007, 23:29) Ну ... Oct 18 2007, 19:35   Сергей Борщ Цитата(SasaVitebsk @ Oct 18 2007, 22:35) ... Oct 18 2007, 20:40   zltigo Цитата(SasaVitebsk @ Oct 18 2007, 22:35) ... Oct 18 2007, 22:05   singlskv To zltigo и SasaVitebsk,
признаю, погорячился насч... Oct 18 2007, 22:48    zltigo Цитата(singlskv @ Oct 19 2007, 01:48) Спр... Oct 19 2007, 07:31    Непомнящий Евгений Цитата(singlskv @ Oct 19 2007, 02:48) Ну ... Oct 19 2007, 07:37     zltigo Цитата(Непомнящий Евгений @ Oct 19 2007, 10... Oct 19 2007, 08:01      pvp Цитата(Сергей Борщ @ Oct 22 2007, 19:33) ... Oct 23 2007, 14:02 SasaVitebsk Внимательно просмотрю.
Правда я отказался на сегод... Oct 22 2007, 10:43 singlskv Цитата(SasaVitebsk @ Oct 22 2007, 14:43) ... Oct 22 2007, 16:43 SasaVitebsk Я когда первый раз увидел результаты компилировани... Oct 22 2007, 21:24 skripach Не стал создавать новую тему, поэтому здесь.
Можно... Nov 9 2009, 14:11 skripach Что никто не знает? ...или я что-то не то спросил. Nov 12 2009, 07:30 zltigo Цитата(skripach @ Nov 12 2009, 10:30) Что... Nov 12 2009, 09:39 KSN Есть вопрос по прерываниям в bootloader и applicat... Feb 27 2010, 09:55 Сергей Борщ Цитата(KSN @ Feb 27 2010, 11:55) Может у ... Feb 27 2010, 11:39
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|