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

 
 
> Ещё раз о бутлоадере, Некоторые тонкости.
SasaVitebsk
сообщение Oct 4 2007, 09:17
Сообщение #1


Гуру
******

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



Задумка такая.

По старту попадаем в бут. Там считаем CRC и если Ok - выходим на саму приложение. Если не Ok то переходим на сам лодырь.

В приложении по команде переходим непосредственно на лоадырь.


То есть мне надо две точки входа. По сбросу и по команде. Хотелось бы использовать незадействованные вектора бутлоадера. Например +2. Как это сделать. Если использовать pragma location, то наверняка будет linker ругаться.

Конечно можно упростить задачу и использовать какой нибудь признак в EEPROM. Или портить CRC к примеру, но что-то мне не нравится такой подход.

А кто как делает?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Oct 19 2007, 08:33
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Если максимальная оптимизация по размеру, то первый вариант весит 312 байт, второй - 192.
Тут действительно вылезают обещанные singlskv 120 байт.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Oct 19 2007, 15:08
Сообщение #3


дятел
*****

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



Цитата(Непомнящий Евгений @ Oct 19 2007, 11:37) *
Т.е., на 12 лишних байт вы соптимизировали smile.gif
Мораль сей басни - оптимизировать низкоуровневые вещи должен компилятор, ему то в 95% случаев надо эту оптимизацию и доверить...

Цитата(Непомнящий Евгений @ Oct 19 2007, 12:33) *
Если максимальная оптимизация по размеру, то первый вариант весит 312 байт, второй - 192.
Тут действительно вылезают обещанные singlskv 120 байт.

А осадок то остался... © (не мой) smile.gif smile.gif

На самом деле в первом варианте "по скорости", IAR просто переклинило по какой-то только ему
ведомой причине.
Так иногда бывает с компиляторами. sad.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 20 2007, 20:07
Сообщение #4


Гуру
******

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



Цитата(singlskv @ Oct 19 2007, 18:08) *
А осадок то остался... © (не мой) smile.gif smile.gif

На самом деле в первом варианте "по скорости", IAR просто переклинило по какой-то только ему
ведомой причине.
Так иногда бывает с компиляторами. sad.gif


По сравнению с вариантом от Сергей Борщ, любезно им предоставленном мне, проигрыш вашего варианта оптимизации на этой подпрограмме составил 26 байт. Хотя честно говоря я не понимаю почему. Я оптимизировал прерывания примерно вашим способом. Видимо знаний компилятора недостаточно.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Oct 21 2007, 17:28
Сообщение #5


дятел
*****

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



Цитата(SasaVitebsk @ Oct 21 2007, 00:07) *
По сравнению с вариантом от Сергей Борщ, любезно им предоставленном мне, проигрыш вашего варианта оптимизации на этой подпрограмме составил 26 байт. Хотя честно говоря я не понимаю почему. Я оптимизировал прерывания примерно вашим способом. Видимо знаний компилятора недостаточно.
Мой вариант, это еще был не "мой" вариант, к реальной оптимизации я просто не приступал wink.gif
так, показал направление ....
Вам нравится 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 раза лучше чем оригинал wink.gif )

И если еще чуть напрячь мозг, то можно на 20-30 байт сократить...
Go to the top of the page
 
+Quote Post
pvp
сообщение Oct 22 2007, 15:24
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 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 байта.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 22 2007, 15:33
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(pvp @ Oct 22 2007, 18:24) *
Поясните, пожалуйста, назначение "__z" (и источник информации)
Было в каком-то из .html в папке документации. Указывает компилятору передавать первый указатель в регистровой паре Z. Встречается также в вариациях __x, __xz (если память не изменяет).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:13
Рейтинг@Mail.ru


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