STM8(S/L), первые впечатления
02.11.2010, 12:59
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 30.06.2005
Сообщений: 3,392
Сказал спасибо: 5
Сказали Спасибо 429 раз(а) в 305 сообщении(ях)
|
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
Сообщений: 79
Сказал спасибо: 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
Сообщений: 79
Сказал спасибо: 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.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от EugenyAM
|
|
А какой компилятор это был?
|
Сообщение от kison
|
|
Далее скачал с сайта ST среду программирования и отладки и триальную версию компилятора COSMIC.
|
Сообщение от EugenyAM
|
|
Видимо остальные регистры проявляют себя при работе с массивами
|
Остальные два - индексные.
Сообщение от niXto
|
|
просто сам до конца не могу разобраться: чье сочетание плюсов-минусов (семейств AVR и STM8 ) лучше для реальной задачи?
|
За одинаковые деньги получите M48 или STM8L151. Сравните их начинку и вопросов таких больше не будет. Я вначале опасался, что несмотря на кучу наворотов тормозными могут оказаться, но вышло не так. STM8 даже побыстрее чем АВР.
Сообщение от zheleznjakov
|
|
Cosmic за 287 тактов
|
А как Вы такты смотрите? Я чего то в STVD не нашел такой полезной фичи... 
И считаю либо калькулятором складывая такты на команду, либо таймер параллельно в свободный полет запускаю. Неудобно.
Сообщение от EugenyAM
|
|
Пока что вижу только один пункт, по которому проигрывает STM - отсутствие аналогового компаратора...
|
STM8L151 - два компаратора. Причем для одного можно как порог выход ЦАП использовать.
|
|
|
|
02.11.2010, 15:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
|
А как Вы такты смотрите?
|
Уже нашел. Правда представление в шестнадцатиричной форме счетчика тактов слегка напрягает.
|
|
|
|
02.11.2010, 15:39
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от Stanislav_S
|
|
Да не вопрос, вариант под СТМ компилятор IAR
|
А походу лажа получилась. Не будет "пузырька" то.  Оптимизатор странный какой то - большую часть алгоритма выкинул. Попробуйте набить массив чем нибудь и выполнить программу в симуляторе. Что то мне подсказывает что нифига он не отсортируется.
У меня на космике результат намного толще выходит - близко к АВР-овскому по объему.
Впрочем к IAR претензий почти нет, если компилировался именно предложенный выше текст.
Он изначально кривой и оптимизатор имеет полное право его выкинуть. Правда IAR почему то выкинул не все. Ну к варианту под STM8 от IAR вообще много претензий встречается - он слишком сырой.
Попробуйте вынести текст в отдельную функцию и главное - массив A[N] не должен быть локальным. Сделайте его глобальным и посмотрите что получится 
Кстати странно что версия под АВР все не выкинула. У меня 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] не должен быть локальным. Сделайте его глобальным и посмотрите что получится 
Кстати странно что версия под АВР все не выкинула. У меня GCC зачистил под 0 вообще все
|
кстати да алгоритм кривоватый, сам недавно заметил, как от другой работы освободился, получилось то что и должно примерно получится, сейчас вот проверил, размер правтически одинаковый, по тактам не считал, сейчас пока времени нету на работу забивать  То что ИАР пока сыроват, это да, но глюков пока не встречал, сейчас прога (ту что с АВР портировал) крутится, пока полет нормальный.
|
|
|
|
02.11.2010, 17:14
|
|
|
Прописка
Регистрация: 09.08.2006
Сообщений: 197
Сказал спасибо: 14
Сказали Спасибо 27 раз(а) в 20 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Почитал ДШ на STM8L15X и нашел, что для реализации low power режимов, нужно исполнять код из RAM. Т.е. нужно копировать функции из флэша в рам (хрен знает как определить размер кода) и потом вызывать через указатель на функцию, или есть другой способ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:23.
|
|