02.11.2010, 12:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
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-битным,оптимизация максимальная.
|
|
|
|
02.11.2010, 13:19
|
|
Временная регистрация
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от zheleznjakov
|
IAR решает задачу за 308 тактов
Cosmic за 287 тактов
на асме за 67 тактов
все от инициализации массивов до окончания сложения и записи. оптимизация по скорости.
|
В предложенном изначально задании инициализации массивов не было и 55 тактов для ассемблера niXto озвучил именно для такого случая. Забавно, но похоже, что в этой задаче силы примерно равны.
В IAR для AVR - от входа в main до выхода из оной - 222 такта (оптимизация по скорости - hight).
Последний раз редактировалось EugVor; 02.11.2010 в 13:24.
|
|
|
|
02.11.2010, 13:22
|
|
Прохожий
Регистрация: 07.10.2009
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 1 сообщении
|
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 |
Оптимизация максимальная по размеру.
Я дкмаю все видно и без коментариев
|
|
|
Эти 4 пользователя(ей) сказали Спасибо Stanislav_S за это сообщение:
|
|
|
02.11.2010, 13:49
|
|
Временная регистрация
Регистрация: 15.03.2006
Сообщений: 80
Сказал спасибо: 3
Сказали Спасибо 83 раз(а) в 11 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Имхо, без нормального анализа листинга это простое сравнение компиляторов. Что тоже в принципе интересно. Но одно дело, когда компилятор не смог быстрее из-за ограничений архитектуры МК, другое дело, когда не захотел использовать все возможности железа.
|
|
|
|
02.11.2010, 13:50
|
|
Прописка
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от EugVor
|
В предложенном изначально задании инициализации массивов не было и 55 тактов для ассемблера niXto озвучил именно для такого случая. Забавно, но похоже, что в этой задаче силы примерно равны.
В IAR для AVR - от входа в main до выхода из оной - 222 такта (оптимизация по скорости - hight).
|
Всё зависит от задачи, если на этапе компиляции "знать" расположение массивов то и STM управится за 25 тактов, опять таки я не очень хорошо знаю асм, возможно задача решаеться ещё проще.
Последний раз редактировалось zheleznjakov; 02.11.2010 в 13:55.
|
|
|
|
02.11.2010, 15:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от EugenyAM
|
А какой компилятор это был?
|
Сообщение от kison
|
Далее скачал с сайта ST среду программирования и отладки и триальную версию компилятора COSMIC.
|
Сообщение от EugenyAM
|
Видимо остальные регистры проявляют себя при работе с массивами
|
Остальные два - индексные.
Сообщение от niXto
|
просто сам до конца не могу разобраться: чье сочетание плюсов-минусов (семейств AVR и STM8 ) лучше для реальной задачи?
|
За одинаковые деньги получите M48 или STM8L151. Сравните их начинку и вопросов таких больше не будет. Я вначале опасался, что несмотря на кучу наворотов тормозными могут оказаться, но вышло не так. STM8 даже побыстрее чем АВР.
Сообщение от zheleznjakov
|
Cosmic за 287 тактов
|
А как Вы такты смотрите? Я чего то в STVD не нашел такой полезной фичи... ![Обижен](images/smilies/icon_beee.gif)
И считаю либо калькулятором складывая такты на команду, либо таймер параллельно в свободный полет запускаю. Неудобно.
Сообщение от EugenyAM
|
Пока что вижу только один пункт, по которому проигрывает STM - отсутствие аналогового компаратора...
|
STM8L151 - два компаратора. Причем для одного можно как порог выход ЦАП использовать.
|
|
|
|
02.11.2010, 15:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
А как Вы такты смотрите?
|
Уже нашел. Правда представление в шестнадцатиричной форме счетчика тактов слегка напрягает.
|
|
|
|
02.11.2010, 15:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от Stanislav_S
|
Да не вопрос, вариант под СТМ компилятор IAR
|
А походу лажа получилась. Не будет "пузырька" то. ![Улыбка](images/smilies/icon_smile.gif) Оптимизатор странный какой то - большую часть алгоритма выкинул. Попробуйте набить массив чем нибудь и выполнить программу в симуляторе. Что то мне подсказывает что нифига он не отсортируется.
У меня на космике результат намного толще выходит - близко к АВР-овскому по объему.
Впрочем к IAR претензий почти нет, если компилировался именно предложенный выше текст.
Он изначально кривой и оптимизатор имеет полное право его выкинуть. Правда IAR почему то выкинул не все. Ну к варианту под STM8 от IAR вообще много претензий встречается - он слишком сырой.
Попробуйте вынести текст в отдельную функцию и главное - массив A[N] не должен быть локальным. Сделайте его глобальным и посмотрите что получится ![Улыбка](images/smilies/icon_smile.gif)
Кстати странно что версия под АВР все не выкинула. У меня GCC зачистил под 0 вообще все
Последний раз редактировалось kison; 02.11.2010 в 15:51.
|
|
|
|
02.11.2010, 17:04
|
|
Прохожий
Регистрация: 07.10.2009
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 1 сообщении
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
А походу лажа получилась. Не будет "пузырька" то. Оптимизатор странный какой то - большую часть алгоритма выкинул. Попробуйте набить массив чем нибудь и выполнить программу в симуляторе. Что то мне подсказывает что нифига он не отсортируется.
У меня на космике результат намного толще выходит - близко к АВР-овскому по объему.
Впрочем к IAR претензий почти нет, если компилировался именно предложенный выше текст.
Он изначально кривой и оптимизатор имеет полное право его выкинуть. Правда IAR почему то выкинул не все. Ну к варианту под STM8 от IAR вообще много претензий встречается - он слишком сырой.
Попробуйте вынести текст в отдельную функцию и главное - массив A[N] не должен быть локальным. Сделайте его глобальным и посмотрите что получится ![Улыбка](images/smilies/icon_smile.gif)
Кстати странно что версия под АВР все не выкинула. У меня GCC зачистил под 0 вообще все
|
кстати да алгоритм кривоватый, сам недавно заметил, как от другой работы освободился, получилось то что и должно примерно получится, сейчас вот проверил, размер правтически одинаковый, по тактам не считал, сейчас пока времени нету на работу забивать ![Улыбка](images/smilies/icon_smile.gif) То что ИАР пока сыроват, это да, но глюков пока не встречал, сейчас прога (ту что с АВР портировал) крутится, пока полет нормальный.
|
|
|
|
02.11.2010, 17:14
|
|
Прописка
Регистрация: 09.08.2006
Сообщений: 198
Сказал спасибо: 14
Сказали Спасибо 27 раз(а) в 20 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Почитал ДШ на STM8L15X и нашел, что для реализации low power режимов, нужно исполнять код из RAM. Т.е. нужно копировать функции из флэша в рам (хрен знает как определить размер кода) и потом вызывать через указатель на функцию, или есть другой способ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:24.
|
|