Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 02.11.2010, 12:59  
Gnider
Почётный гражданин KAZUS.RU
 
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
Gnider на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Ну раз никто не хочет начать,то я как человек равноудаленный от stm8,avr и пиков начну.

Давайте замерим скорость обьем следующей проги:


const N = 100;

void main()

{

int i, j, A[N], c;



for ( i = 0; i ‹ N-1; i ++ )

for ( j = N-2; j ›= i; j -- )

if ( A[j] › A[j+1] )

{

c = A[j]; A[j] = A[j+1];

A[j+1] = c;

}


}

"int" будем считать 16-битным,оптимизация максимальная.
Реклама:
Gnider вне форума  
Непрочитано 02.11.2010, 13:19  
EugVor
Временная регистрация
 
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
EugVor на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от zheleznjakov Посмотреть сообщение
IAR решает задачу за 308 тактов
Cosmic за 287 тактов
на асме за 67 тактов
все от инициализации массивов до окончания сложения и записи. оптимизация по скорости.
В предложенном изначально задании инициализации массивов не было и 55 тактов для ассемблера niXto озвучил именно для такого случая. Забавно, но похоже, что в этой задаче силы примерно равны.
В IAR для AVR - от входа в main до выхода из оной - 222 такта (оптимизация по скорости - hight).

Последний раз редактировалось EugVor; 02.11.2010 в 13:24.
EugVor вне форума  
Непрочитано 02.11.2010, 13:22  
Stanislav_S
Прохожий
 
Регистрация: 07.10.2009
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 1 сообщении
Stanislav_S на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Да не вопрос, вариант под СТМ компилятор IAR
Код:

   \                                 In section .near.rodata, align 1
C:\Project for ST8\Test\main.c
      1          const unsigned char N = 100;
   \                     N:
   \   000000 64                    DC8 100

   \                                 In section .far_func.text, align 1
      2          void main()
      3          {
      4            int i, j, A[100], c;
      5          
      6            for ( i = 0; i ‹ N-1; i ++ )
   \                     main:
   \   000000 3F00                  CLR       S:?b0
   \   000002 3F00                  CLR       S:?b1
      7            {
      8              for ( j = N-2; j ›= i; j -- )
   \                     ??main_0:
   \   000004 AE0062                LDW       X, #0x62
   \                     ??main_1:
   \   000007 5A                    DECW      X
   \   000008 B300                  CPW       X, S:?w0
   \   00000A 2E00                  JRSGE     L:??main_1
      9              if (A[j] › A[j+1])
     10              {
     11                c = A[j]; 
     12                A[j] = A[j+1];
     13                A[j+1] = c;
     14              }
     15            }
   \   00000C BE00                  LDW       X, S:?w0
   \   00000E 5C                    INCW      X
   \   00000F BF00                  LDW       S:?w0, X
   \   000011 A30063                CPW       X, #0x63
   \   000014 2F00                  JRSLT     L:??main_0
     16          }
   \   000016 87                    RETF

   Section sizes:

     Function/Label Bytes
     -------------- -----
     N                 1
     main             23

 
 23 bytes in section .far_func.text
  1 byte  in section .near.rodata
 
 23 bytes of CODE  memory
  1 byte  of CONST memory

Errors: none
Warnings: none
Аналогично для АВР, компилятор то же IAR
Код:
   \                                 In  segment NEAR_I, align 1, keep-with-next
   \   00000000                      REQUIRE `?‹Segment init: NEAR_I›`
C:\Project for AVR\Test\main.c
      1          const unsigned char N = 100;
   \                     N:
   \   00000000                      DS 1
   \   00000001                      REQUIRE `?‹Initializer for N›`

   \                                 In  segment CODE, align 2, keep-with-next
      2          void main()
   \                     main:
      3          {
   \   00000000   ....               RCALL   ?PROLOGUE4_L09
   \   00000002   97EF               SBIW    R29:R28, 63
   \   00000004   97EF               SBIW    R29:R28, 63
   \   00000006   97EF               SBIW    R29:R28, 63
   \   00000008   972B               SBIW    R29:R28, 11
      4            int i, j, A[100], c;
      5          
      6            for ( i = 0; i ‹ N-1; i ++ )
   \   0000000A   E080               LDI     R24, 0
   \   0000000C   E090               LDI     R25, 0
      7            {
      8              for ( j = N-2; j ›= i; j -- )
   \                     ??main_0:
   \   0000000E   E6A2               LDI     R26, 98
   \   00000010   E0B0               LDI     R27, 0
      9              if (A[j] › A[j+1])
   \                     ??main_1:
   \   00000012   01FE               MOVW    R31:R30, R29:R28
   \   00000014   018D               MOVW    R17:R16, R27:R26
   \   00000016   0F00               LSL     R16
   \   00000018   1F11               ROL     R17
   \   0000001A   0FE0               ADD     R30, R16
   \   0000001C   1FF1               ADC     R31, R17
   \   0000001E   8100               LD      R16, Z
   \   00000020   8111               LDD     R17, Z+1
   \   00000022   8122               LDD     R18, Z+2
   \   00000024   8133               LDD     R19, Z+3
   \   00000026   1720               CP      R18, R16
   \   00000028   0731               CPC     R19, R17
   \   0000002A   F43C               BRGE    ??main_2
     10              {
     11                c = A[j]; 
   \   0000002C   0198               MOVW    R19:R18, R17:R16
     12                A[j] = A[j+1];
   \   0000002E   8102               LDD     R16, Z+2
   \   00000030   8113               LDD     R17, Z+3
   \   00000032   8300               ST      Z, R16
   \   00000034   8311               STD     Z+1, R17
     13                A[j+1] = c;
   \   00000036   8322               STD     Z+2, R18
   \   00000038   8333               STD     Z+3, R19
     14              }
   \                     ??main_2:
   \   0000003A   9711               SBIW    R27:R26, 1
   \   0000003C   17A8               CP      R26, R24
   \   0000003E   07B9               CPC     R27, R25
   \   00000040   F744               BRGE    ??main_1
     15            }
   \   00000042   9601               ADIW    R25:R24, 1
   \   00000044   3683               CPI     R24, 99
   \   00000046   E000               LDI     R16, 0
   \   00000048   0790               CPC     R25, R16
   \   0000004A   F30C               BRLT    ??main_0
     16          }
   \   0000004C   96EF               ADIW    R29:R28, 63
   \   0000004E   96EF               ADIW    R29:R28, 63
   \   00000050   96EF               ADIW    R29:R28, 63
   \   00000052   962B               ADIW    R29:R28, 11
   \   00000054   E0E4               LDI     R30, 4
   \   00000056   ....               RJMP    ?EPILOGUE_B4_L09

   \                                 In  segment NEAR_ID, align 1, keep-with-next
   \                     `?‹Initializer for N›`:
   \   00000000   64                 DB 100

   Maximum stack usage in bytes:

     Function CSTACK RSTACK
     -------- ------ ------
     main       204      2


   Segment part sizes:

     Function/Label       Bytes
     --------------       -----
     N                       1
     main                   88
     ?‹Initializer for N›    1
      Others                 6

 
 88 bytes in segment CODE
  6 bytes in segment INITTAB
  1 byte  in segment NEAR_I
  1 byte  in segment NEAR_ID
 
 89 bytes of CODE memory (+ 6 bytes shared)
  1 byte  of DATA memory

Errors: none
Warnings: none
Оптимизация максимальная по размеру.
Я дкмаю все видно и без коментариев
Stanislav_S вне форума  
Эти 4 пользователя(ей) сказали Спасибо Stanislav_S за это сообщение:
alexgap (02.11.2010), Flopix (08.01.2011), niXto (02.11.2010), sarsar (15.03.2011)
Непрочитано 02.11.2010, 13:49  
EugVor
Временная регистрация
 
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
EugVor на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Имхо, без нормального анализа листинга это простое сравнение компиляторов. Что тоже в принципе интересно. Но одно дело, когда компилятор не смог быстрее из-за ограничений архитектуры МК, другое дело, когда не захотел использовать все возможности железа.
EugVor вне форума  
Непрочитано 02.11.2010, 13:50  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от EugVor Посмотреть сообщение
В предложенном изначально задании инициализации массивов не было и 55 тактов для ассемблера niXto озвучил именно для такого случая. Забавно, но похоже, что в этой задаче силы примерно равны.
В IAR для AVR - от входа в main до выхода из оной - 222 такта (оптимизация по скорости - hight).
Всё зависит от задачи, если на этапе компиляции "знать" расположение массивов то и STM управится за 25 тактов, опять таки я не очень хорошо знаю асм, возможно задача решаеться ещё проще.

Последний раз редактировалось zheleznjakov; 02.11.2010 в 13:55.
zheleznjakov вне форума  
Непрочитано 02.11.2010, 15:12  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от EugenyAM Посмотреть сообщение
А какой компилятор это был?
Сообщение от kison Посмотреть сообщение
Далее скачал с сайта ST среду программирования и отладки и триальную версию компилятора COSMIC.
Сообщение от EugenyAM Посмотреть сообщение
Видимо остальные регистры проявляют себя при работе с массивами
Остальные два - индексные.

Сообщение от niXto Посмотреть сообщение
просто сам до конца не могу разобраться: чье сочетание плюсов-минусов (семейств AVR и STM8 ) лучше для реальной задачи?
За одинаковые деньги получите M48 или STM8L151. Сравните их начинку и вопросов таких больше не будет. Я вначале опасался, что несмотря на кучу наворотов тормозными могут оказаться, но вышло не так. STM8 даже побыстрее чем АВР.

Сообщение от zheleznjakov Посмотреть сообщение
Cosmic за 287 тактов
А как Вы такты смотрите? Я чего то в STVD не нашел такой полезной фичи...
И считаю либо калькулятором складывая такты на команду, либо таймер параллельно в свободный полет запускаю. Неудобно.

Сообщение от EugenyAM Посмотреть сообщение
Пока что вижу только один пункт, по которому проигрывает STM - отсутствие аналогового компаратора...
STM8L151 - два компаратора. Причем для одного можно как порог выход ЦАП использовать.
kison вне форума  
Непрочитано 02.11.2010, 15:20  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
А как Вы такты смотрите?
Уже нашел. Правда представление в шестнадцатиричной форме счетчика тактов слегка напрягает.
kison вне форума  
Непрочитано 02.11.2010, 15:39  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от Stanislav_S Посмотреть сообщение
Да не вопрос, вариант под СТМ компилятор IAR
А походу лажа получилась. Не будет "пузырька" то. Оптимизатор странный какой то - большую часть алгоритма выкинул. Попробуйте набить массив чем нибудь и выполнить программу в симуляторе. Что то мне подсказывает что нифига он не отсортируется.
У меня на космике результат намного толще выходит - близко к АВР-овскому по объему.
Впрочем к IAR претензий почти нет, если компилировался именно предложенный выше текст.
Он изначально кривой и оптимизатор имеет полное право его выкинуть. Правда IAR почему то выкинул не все. Ну к варианту под STM8 от IAR вообще много претензий встречается - он слишком сырой.
Попробуйте вынести текст в отдельную функцию и главное - массив A[N] не должен быть локальным. Сделайте его глобальным и посмотрите что получится
Кстати странно что версия под АВР все не выкинула. У меня GCC зачистил под 0 вообще все

Последний раз редактировалось kison; 02.11.2010 в 15:51.
kison вне форума  
Непрочитано 02.11.2010, 17:04  
Stanislav_S
Прохожий
 
Регистрация: 07.10.2009
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 1 сообщении
Stanislav_S на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
А походу лажа получилась. Не будет "пузырька" то. Оптимизатор странный какой то - большую часть алгоритма выкинул. Попробуйте набить массив чем нибудь и выполнить программу в симуляторе. Что то мне подсказывает что нифига он не отсортируется.
У меня на космике результат намного толще выходит - близко к АВР-овскому по объему.
Впрочем к IAR претензий почти нет, если компилировался именно предложенный выше текст.
Он изначально кривой и оптимизатор имеет полное право его выкинуть. Правда IAR почему то выкинул не все. Ну к варианту под STM8 от IAR вообще много претензий встречается - он слишком сырой.
Попробуйте вынести текст в отдельную функцию и главное - массив A[N] не должен быть локальным. Сделайте его глобальным и посмотрите что получится
Кстати странно что версия под АВР все не выкинула. У меня GCC зачистил под 0 вообще все
кстати да алгоритм кривоватый, сам недавно заметил, как от другой работы освободился, получилось то что и должно примерно получится, сейчас вот проверил, размер правтически одинаковый, по тактам не считал, сейчас пока времени нету на работу забивать То что ИАР пока сыроват, это да, но глюков пока не встречал, сейчас прога (ту что с АВР портировал) крутится, пока полет нормальный.
Stanislav_S вне форума  
Непрочитано 02.11.2010, 17:14  
ish0
Прописка
 
Регистрация: 09.08.2006
Сообщений: 198
Сказал спасибо: 14
Сказали Спасибо 27 раз(а) в 20 сообщении(ях)
ish0 на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Почитал ДШ на STM8L15X и нашел, что для реализации low power режимов, нужно исполнять код из RAM. Т.е. нужно копировать функции из флэша в рам (хрен знает как определить размер кода) и потом вызывать через указатель на функцию, или есть другой способ?
ish0 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
KiCAD-объявления и впечатления al_dan KiCAD 32 03.10.2016 17:02
Народ, посмотрите quasm, Как ваши впечатления? suri Proteus, KiCAD и другие ECAD 5 14.10.2009 11:57


Часовой пояс GMT +4, время: 11:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot