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

 
 
> STM8, кто нибудь использует?
KRS
сообщение Apr 13 2010, 11:27
Сообщение #1


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Наткнулся тут на новое семейство.
Заинтересовали LQFP44 c CAN, как дешовая замена AT90CAN64 или мелких STM32.

На семинар
http://catalog.compel.ru/blog/2010/04/08/2...ntrollery-stm8/
никто не собирается?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение May 1 2010, 17:16
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Поставил я все 3 компилера.
Для начала решил посуммировать вектора.
Т.к. у ядра всего 2 индексных регистра, интересно посомтреть что будут делать компиляторы, когда их нужно больше.
Код
void add8_2(unsigned char *a, unsigned char *b, unsigned char *c, unsigned char len)
{
    do {
        *c++ = *a++ + *b++;
    } while(--len);
}

Космик использовал только один индексный регистр, по очереди для 3 указателей. Лучше всего скомпилировал while(--len);
Код
  43  0016 89                pushw    x
  44       00000000      OFST:    set    0
  46  0017               L11:
  47                    ; 16         *c++ = *a++ + *b++;
  48  0017 1e05              ldw    x,(OFST+5,sp)
  49  0019 f6                ld    a,(x)
  50  001a 5c                incw    x
  51  001b 1f05              ldw    (OFST+5,sp),x
  52  001d 1e01              ldw    x,(OFST+1,sp)
  53  001f fb                add    a,(x)
  54  0020 5c                incw    x
  55  0021 1f01              ldw    (OFST+1,sp),x
  56  0023 1e07              ldw    x,(OFST+7,sp)
  57  0025 f7                ld    (x),a
  58  0026 5c                incw    x
  59  0027 1f07              ldw    (OFST+7,sp),x
  60                    ; 17     } while(--len);
  61  0029 0a09              dec    (OFST+9,sp)
  62  002b 26ea              jrne    L11
  63                    ; 18 }
  64  002d 85                popw    x
  65  002e 81                ret

Райзонанс мог бы выйграть - использовал X для *a и Y для *b и *с, но с *a++ у него вышел прокол, поэтому в итоге код получился не лучше. И лишняя проверка после dec
Код
             ; FUNCTION ?add8_2 (BEGIN)
             ; Register XW is assigned to parameter a
0000         ?DO_0003:
             ; SOURCE LINE # 16
0000 1603       F                      LDW    Y,(003H,SP)  ; [ b ]
0002 90F6                              LD     A,(Y)
0004 905C                              INCW   Y
0006 1703       F                      LDW    (003H,SP),Y  ; [ b ]
0008 BF03       F                      LDW    ?CH.w,X
000A 5C                                INCW   X
000B 92CB00     F                      ADD    A,[?CH.w]
000E 1605       F                      LDW    Y,(005H,SP)  ; [ c ]
0010 90BF02     F                      LDW    ?BH.w,Y
0013 905C                              INCW   Y
0015 1705       F                      LDW    (005H,SP),Y  ; [ c ]
0017 92C700     F                      LD     [?BH.w],A
001A 0A07       F                      DEC    (007H,SP)  ; [ len ]
001C 0D07       F                      TNZ    (007H,SP)  ; [ len ]
001E 26E0                              JRNE   ?DO_0003
0020 81                                RET

У IAR код тоже не фонтан! Но главное посмотрите на while(--len)!!!!
К тому же IAR не использует стек, а использует виртуальные регистры. Что IMHO для этого ядра криво! Что IAR делает хорошо - так это общий код выделят в подпрограммы, если нужно по размеру сжать! И у IAR лучший способ передачи параметров!! задействуются все рагистры.
Код
\                     add8_2:
   \   000000 BF00                  LDW       S:?w1, X
   \   000002 93                    LDW       X, Y
   \   000003 B700                  LD        S:?b4, A
     12              do {
     13                  *c++ = *a++ + *b++;
   \                     ??add8_2_0:
   \   000005 F6                    LD        A, (X)
   \   000006 92CB00                ADD       A, [S:?w1.w]
   \   000009 92C700                LD        [S:?w0.w], A
   \   00000C 5C                    INCW      X
   \   00000D 90BE00                LDW       Y, S:?w1
   \   000010 905C                  INCW      Y
   \   000012 90BF00                LDW       S:?w1, Y
   \   000015 90BE00                LDW       Y, S:?w0
   \   000018 905C                  INCW      Y
   \   00001A 90BF00                LDW       S:?w0, Y
     14              } while(--len);
   \   00001D B600                  LD        A, S:?b4
   \   00001F ABFF                  ADD       A, #0xff
   \   000021 B700                  LD        S:?b4, A
   \   000023 4F                    CLR       A
   \   000024 B100                  CP        A, S:?b4
   \   000026 2600                  JRNE      L:??add8_2_0
     15          }
   \   000028 81                    RET

Если код функции поменять на
Код
void add8_21(unsigned char *a, unsigned char *b, unsigned char *c, unsigned char len)
{
    do {
        *c = *a + *b;
        ++a; ++b; ++c;
    } while(--len);
}

То райзонанс генерирует практически идеальный код
Код
             ; FUNCTION ?add8_21 (BEGIN)
             ; Register XW is assigned to parameter a
0000         ?DO_0005:
             ; SOURCE LINE # 23
0000 1603       F                      LDW    Y,(003H,SP)  ; [ b ]
0002 90F6                              LD     A,(Y)
0004 FB                                ADD    A,(X)
0005 1605       F                      LDW    Y,(005H,SP)  ; [ c ]
0007 90F7                              LD     (Y),A
             ; SOURCE LINE # 24
0009 5C                                INCW   X
000A 1603       F                      LDW    Y,(003H,SP)  ; [ b ]
000C 905C                              INCW   Y
000E 1703       F                      LDW    (003H,SP),Y  ; [ b ]
0010 1605       F                      LDW    Y,(005H,SP)  ; [ c ]
0012 905C                              INCW   Y
0014 1705       F                      LDW    (005H,SP),Y  ; [ c ]
0016 0A07       F                      DEC    (007H,SP)  ; [ len ]
0018 0D07       F                      TNZ    (007H,SP)  ; [ len ]
001A 26E4                              JRNE   ?DO_0005
001C 81                                RET


С более простой задачей
Код
void add8_1(unsigned char *a, unsigned char *b, unsigned char len)
{
    do {
        *a++ += *b++;
    } while(--len);
}

Все справились примерно одинаково неудовлетворительно!
Ее надо записать в таком виде:
Код
void add8_3(unsigned char *a, unsigned char *b, unsigned char len)
{
    do {
        *a += *b;
                ++a;
                ++b;
    } while(--len);
}


Тогда IAR и Райзонанс справились гораздо лучше! Только райзонанс зачем что Y каждый раз сохраняет и загружает, а IAR с фирменным } while(--len);
Космик и X и Y перегружает и код не отличается практически от add8_1

райзонанс
Код
             ; FUNCTION ?add8_3 (BEGIN)
             ; Register XW is assigned to parameter a
0000         ?DO_0007:
             ; SOURCE LINE # 31
0000 1603       F                      LDW    Y,(003H,SP)  ; [ b ]
0002 F6                                LD     A,(X)
0003 90FB                              ADD    A,(Y)
0005 F7                                LD     (X),A
             ; SOURCE LINE # 32
0006 5C                                INCW   X
             ; SOURCE LINE # 33
0007 905C                              INCW   Y
0009 1703       F                      LDW    (003H,SP),Y  ; [ b ]
000B 0A05       F                      DEC    (005H,SP)  ; [ len ]
000D 0D05       F                      TNZ    (005H,SP)  ; [ len ]
000F 26EF                              JRNE   ?DO_0007
0011 81                                RET

IAR
Код
     24          void add8_3(unsigned char *a, unsigned char *b, unsigned char len)
     25          {
   \                     add8_3:
   \   000000 B700                  LD        S:?b0, A
     26              do {
     27                  *a += *b;
   \                     ??add8_3_0:
   \   000002 90F6                  LD        A, (Y)
   \   000004 FB                    ADD       A, (X)
   \   000005 F7                    LD        (X), A
     28                          ++a;
   \   000006 5C                    INCW      X
     29                          ++b;
   \   000007 905C                  INCW      Y
     30              } while(--len);
   \   000009 B600                  LD        A, S:?b0
   \   00000B ABFF                  ADD       A, #0xff
   \   00000D B700                  LD        S:?b0, A
   \   00000F 4F                    CLR       A
   \   000010 B100                  CP        A, S:?b0
   \   000012 2600                  JRNE      L:??add8_3_0
     31          }
   \   000014 81                    RET


Cosmic
Код
100  004e               _add8_3:
101  004e 89                pushw    x
102       00000000      OFST:    set    0
104  004f               L52:
105                    ; 32         *a += *b;
106  004f 1e01              ldw    x,(OFST+1,sp)
107  0051 1605              ldw    y,(OFST+5,sp)
108  0053 f6                ld    a,(x)
109  0054 90fb              add    a,(y)
110  0056 f7                ld    (x),a
111                    ; 33         ++a;
112  0057 5c                incw    x
113  0058 1f01              ldw    (OFST+1,sp),x
114                    ; 34         ++b;
115  005a 1e05              ldw    x,(OFST+5,sp)
116  005c 5c                incw    x
117  005d 1f05              ldw    (OFST+5,sp),x
118                    ; 35     } while(--len);
119  005f 0a07              dec    (OFST+7,sp)
120  0061 26ec              jrne    L52
121                    ; 36 }
122  0063 85                popw    x
123  0064 81                ret

В общем надо что то посложнее попробовать!


Цитата(Pat @ Apr 18 2010, 21:28) *
Было интересно посмотреть вход в прерывание и не очень проникся там сплошные call.

Это сокрее всего из-за настройки оптимизации - надо вместо Balanced поставить Speed или Cross Call убрать!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- KRS   STM8   Apr 13 2010, 11:27
- - zksystem   Я пользую STM8, только CAN в них не юзал. Обидно ч...   Apr 13 2010, 13:06
|- - Pat   Цитата(zksystem @ Apr 13 2010, 15:21) Я п...   Apr 13 2010, 18:52
||- - KRS   Цитата(Pat @ Apr 13 2010, 23:07) Можно ли...   Apr 13 2010, 20:02
|||- - sonycman   Цитата(KRS @ Apr 14 2010, 00:17) Ну после...   Apr 14 2010, 13:23
||- - zksystem   Цитата(Pat @ Apr 13 2010, 23:07) Можно ли...   Apr 15 2010, 10:45
|- - Xenia   Цитата(zksystem @ Apr 13 2010, 17:21) Я п...   Apr 16 2010, 12:53
|- - KRS   Цитата(Xenia @ Apr 16 2010, 17:08) Не рас...   Apr 17 2010, 19:33
|- - Xenia   Цитата(KRS @ Apr 17 2010, 23:48) А кто ни...   Apr 17 2010, 19:39
||- - KRS   Цитата(Xenia @ Apr 17 2010, 23:54) А вот ...   Apr 17 2010, 19:58
||- - Xenia   Цитата(KRS @ Apr 18 2010, 00:13) Наскольк...   Apr 17 2010, 20:04
||- - KRS   Цитата(Xenia @ Apr 18 2010, 00:19) А вы к...   Apr 17 2010, 20:30
||- - Xenia   Цитата(KRS @ Apr 18 2010, 00:42) Лично мн...   Apr 17 2010, 20:32
||- - KRS   Цитата(Xenia @ Apr 18 2010, 00:47) Не под...   Apr 17 2010, 20:48
||- - zltigo   Цитата(KRS @ Apr 18 2010, 00:03) Она прос...   Apr 17 2010, 21:05
||- - KRS   Цитата(zltigo @ Apr 18 2010, 01:20) по Ва...   Apr 17 2010, 21:18
|- - zltigo   Цитата(KRS @ Apr 17 2010, 22:48) Какое же...   Apr 17 2010, 20:13
- - delamoure   Актуальность определяется целесообразностью примен...   Apr 14 2010, 10:59
- - ukpyr   Цитатакак дешовая замена AT90CAN64 или мелких STM3...   Apr 14 2010, 11:37
|- - KRS   Цитата(ukpyr @ Apr 14 2010, 15:52) жаль g...   Apr 14 2010, 13:02
- - Xenia   Поглядела я на Instruction set этого STM8 - дерьмо...   Apr 17 2010, 21:24
|- - zltigo   Цитата(Xenia @ Apr 18 2010, 00:39) Погляд...   Apr 17 2010, 22:40
|- - Xenia   Цитата(zltigo @ Apr 18 2010, 02:55) А теп...   Apr 18 2010, 01:18
|- - _Pasha   Цитата(Xenia @ Apr 18 2010, 04:33) Вот и ...   Apr 18 2010, 03:57
|- - zltigo   Цитата(Xenia @ Apr 18 2010, 04:33) К тому...   Apr 18 2010, 07:28
||- - KRS   Цитата(zltigo @ Apr 18 2010, 11:43) Разум...   Apr 18 2010, 08:30
||- - zltigo   Цитата(KRS @ Apr 18 2010, 11:45) Есть пра...   Apr 18 2010, 08:32
|- - _Bill   Цитата(Xenia @ Apr 18 2010, 05:18) Вся па...   Apr 27 2010, 19:48
- - scifi   Странный спор... Я-то по наивности думал, что в жи...   Apr 18 2010, 08:34
|- - zltigo   Цитата(scifi @ Apr 18 2010, 11:49) Странн...   Apr 18 2010, 09:11
|- - Xenia   Цитата(zltigo @ Apr 18 2010, 13:26) Да не...   Apr 18 2010, 13:24
|- - zltigo   Цитата(Xenia @ Apr 18 2010, 16:39) Дело о...   Apr 18 2010, 14:23
|- - Xenia   Цитата(zltigo @ Apr 18 2010, 18:38) А вот...   Apr 18 2010, 16:04
|- - Pat   Цитата(Xenia @ Apr 18 2010, 18:19) уже по...   Apr 18 2010, 17:28
|- - WHALE   Цитата(Pat @ Apr 18 2010, 21:43) Xenia не...   Apr 18 2010, 17:49
|- - Xenia   Цитата(WHALE @ Apr 18 2010, 22:04) а вы п...   Apr 18 2010, 18:30
|- - WHALE   Цитата(Xenia @ Apr 18 2010, 22:45) Я пола...   Apr 18 2010, 18:44
|- - zltigo   Цитата(Xenia @ Apr 18 2010, 21:45) Я пола...   Apr 18 2010, 19:35
|- - Xenia   Цитата(zltigo @ Apr 18 2010, 23:50) Да, с...   Apr 18 2010, 20:05
|- - Stanislav_S   Хм.. пересменка говорите? Так вот китайское предст...   Apr 19 2010, 07:41
|- - zksystem   Ну свет клином не сошелся на атмелах и микрочипах,...   Apr 22 2010, 12:20
- - KRS   Сходил я на семинар в Питере! Из полезного - д...   Apr 30 2010, 08:02
|- - Stanislav_S   Цитата(KRS @ Apr 30 2010, 13:02) Сходил я...   Apr 30 2010, 09:24
|- - KRS   Цитата(Stanislav_S @ Apr 30 2010, 13:24) ...   Apr 30 2010, 09:51
- - ukpyr   интересно сравнить с avr-gcc и avr-iar по объему и...   May 1 2010, 17:24
|- - KRS   Цитата(ukpyr @ May 1 2010, 21:24) интерес...   May 1 2010, 18:09
- - KRS   Посмотрел я как компилируется моя функция разбора ...   May 1 2010, 23:00
|- - _Bill   Да уж... Сильно улучшает... if (!--Len) во...   May 3 2010, 07:48
|- - Xenia   Цитата(_Bill @ May 3 2010, 11:48) PS: Вид...   May 3 2010, 11:48
|- - _Bill   Цитата(Xenia @ May 3 2010, 15:48) Это оче...   May 3 2010, 14:58
|- - KRS   Цитата(_Bill @ May 3 2010, 18:58) Хотя я ...   May 3 2010, 15:27
|- - Xenia   Цитата(_Bill @ May 3 2010, 18:58) Хотя я ...   May 3 2010, 16:01
|- - KRS   Цитата(Xenia @ May 3 2010, 20:01) А разве...   May 3 2010, 16:29
||- - zltigo   Цитата(KRS @ May 3 2010, 19:29) Разница б...   May 3 2010, 16:57
|- - _Bill   Цитата(Xenia @ May 3 2010, 20:01) А разве...   May 3 2010, 18:28
- - KRS   ассемблеры по возможностям примерно одинаковые...   May 3 2010, 21:02
- - Xenia   Только что (файл датируется 5 мая) IAR выложила се...   May 8 2010, 09:24
|- - KRS   Цитата(Xenia @ May 8 2010, 13:24) Только ...   May 8 2010, 20:45
|- - zltigo   Цитата(KRS @ May 8 2010, 23:45) Поддержка...   May 8 2010, 22:27
- - guxa   Цитата(KRS @ Apr 13 2010, 15:27) Наткнулс...   May 14 2010, 10:04
|- - KRS   Цитата(guxa @ May 14 2010, 14:04) Скажите...   May 14 2010, 11:50
|- - Dog Pawlowa   Вот CAN вам неймется, подскажите лучше, кто тела п...   May 14 2010, 12:58
|- - _Bill   Цитата(Dog Pawlowa @ May 14 2010, 16:58) ...   May 14 2010, 18:01
|- - Dog Pawlowa   Цитата(_Bill @ May 14 2010, 21:01) Делает...   May 14 2010, 19:23
- - KRS   Таблица прерываний находится в библиотеке, исходни...   May 14 2010, 20:32
|- - Dog Pawlowa   Цитата(KRS @ May 14 2010, 23:32) Т.е. есл...   May 14 2010, 20:49
|- - KRS   Цитата(Dog Pawlowa @ May 15 2010, 00:49) ...   May 14 2010, 21:19
||- - Dog Pawlowa   Цитата(KRS @ May 15 2010, 00:19) ST навер...   May 14 2010, 21:32
|- - Т.Достоевский   Цитата(Dog Pawlowa @ May 15 2010, 00:49) ...   Jun 15 2010, 21:50
- - dimka76   А с программаторами для них как дела обстоят? Есть...   Jun 15 2010, 12:02
|- - ZVE   Бесплатного вроде как нет. Да и особо не нужно, та...   Jun 15 2010, 18:08
- - Linker   Лично меня заинтересовала заявленная устойчивость ...   Jun 30 2010, 16:53
|- - _Pasha   Цитата(Linker @ Jun 30 2010, 19:53) Лично...   Jun 30 2010, 20:38
||- - Linker   Цитата(_Pasha @ Jul 1 2010, 03:38) В каки...   Jul 1 2010, 14:19
|- - _Bill   Цитата(Linker @ Jun 30 2010, 19:53) Хотел...   Jun 30 2010, 23:25
|- - IGK   Цитата(_Bill @ Jul 1 2010, 02:25) ...Семе...   Jul 1 2010, 05:50
- - Aner   к каким еще перенапяжениям? к статике!   Jul 1 2010, 14:22
|- - topkin   Цитата(Aner @ Jul 1 2010, 18:22) к каким ...   Jul 2 2010, 04:22
|- - Linker   Цитата(Aner @ Jul 1 2010, 21:22) к каким ...   Jul 2 2010, 17:18
|- - IGK   Нашел время осмотреть STM8S-Discovery :-) Я до это...   Jul 9 2010, 18:34
|- - topkin   Цитата(IGK @ Jul 10 2010, 06:34) Нашел вр...   Jul 14 2010, 12:27
|- - IGK   Цитата(topkin @ Jul 14 2010, 15:27) У мен...   Jul 14 2010, 18:18
- - pr2   Подскажите, где-то есть сейчас в наличии STM8S-Dis...   Jul 14 2010, 01:40
- - Xenia   Вчера вышел новый сервис-пак к EWSTM8 №3 (№2 пропу...   Jul 14 2010, 12:19
|- - KRS   Цитата(Xenia @ Jul 14 2010, 16:19) Не пло...   Aug 2 2010, 10:37
- - ведущий_специалист   Цитата(IGK @ Jul 9 2010, 22:34) Нашел вре...   Aug 2 2010, 17:58
|- - e-serg   Цитата(ведущий_специалист @ Aug 3 2010, 02...   Aug 4 2010, 16:29
|- - _Bill   Цитата(ведущий_специалист @ Aug 2 2010, 21...   Aug 5 2010, 06:14
|- - Stanislav_S   Цитата(_Bill @ Aug 5 2010, 10:14) У меня ...   Aug 5 2010, 08:02
|- - _Bill   Цитата(Stanislav_S @ Aug 5 2010, 12:02) А...   Aug 5 2010, 12:55
- - ukpyr   а какой смысл в stm8s после появления stm32s100 (ц...   Aug 4 2010, 17:04
|- - topkin   Цитата(ukpyr @ Aug 4 2010, 21:04) а какой...   Aug 5 2010, 04:16
- - oll   Т.е. обьясните спецы - с Дискавери идет все таки п...   Aug 5 2010, 16:11
|- - Stanislav_S   Насчет дискавери сказать трудно, но могу сказать ч...   Aug 6 2010, 09:03
- - pan_oleg   День добрый. Имею вопрос? Кто-то уже внешние интер...   Sep 15 2010, 12:24
|- - dimka76   Цитата(pan_oleg @ Sep 15 2010, 16:24) но ...   Sep 15 2010, 12:36
|- - pan_oleg   Цитата(dimka76 @ Sep 15 2010, 15:36) Так ...   Sep 15 2010, 13:20
- - ArtemDement   Коллеги, не подскажите, можно ли использовать STM8...   Oct 22 2010, 17:34
- - ArtemDement   Неужели нет никаких идей ?   Oct 26 2010, 16:49
2 страниц V   1 2 >


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

 


RSS Текстовая версия Сейчас: 7th August 2025 - 13:36
Рейтинг@Mail.ru


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