|
Я просто не верю что IAR STM8 такой тупой!, Ведь это же всегда был один из самых качественных компиляторов |
|
|
|
May 9 2017, 20:00
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Код #pragma inline=forced static void inline f(uint8_t i) { while(--i) asm(""); }
int main() { f(10); } В результате: Код 183 int main() 184 { \ main: \ 000000 52 01 SUB SP, #0x1 186 f(10); \ 000002 35 0A .... MOV S:?b0, #0xa \ 000006 20 00 JRA L:??main_0 \ ??main_1: \ ??main_0: \ 000008 B6 .. LD A, S:?b0 \ 00000A 4A DEC A \ 00000B B7 .. LD S:?b0, A \ 00000D 26 F9 JRNE L:??main_1 ЗАЧЕМ? Зачем он делает всё это???? Настройки компилятора по полной программе: Multi-file compilation, High, Speed +No size constraints P.S. Cosmic же на много толковее справился, хотя я конечно по прежнему не понимаю почему нельзя просто с регистром A работать.... Зачем в стек то? Код 60 .text: section .text,new 61 0000 _main: 63 0000 88 push a 64 00000001 OFST: set 1 67 ; 10 f(12); 70 0001 a60c ld a,#12 71 0003 6b01 ld (OFST+0,sp),a 74 0005 L72: 75 ; 5 _asm(""); 79 ; 4 while(--i) 81 0005 0a01 dec (OFST+0,sp) 83 0007 26fc jrne L72 /////////////////////////////////////////////// 84 0009 L73: 86 0009 20fe jra L73 99 xdef _main 118 end
--------------------
The truth is out there...
|
|
|
|
|
 |
Ответов
|
May 11 2017, 10:24
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата Приведите лучше пример реализации БИХ-фильтра для разных компиляторов biggrin.gif Проверено на вполне боевой реализации void fir_mem16() из https://github.com/xiph/speex/blob/master/libspeex/filters.c из Speex Взято как средний случай обычного фильтра на Си, без особых оптимизаций там и всего прочего. Согласен, чистота эксперимента нарушена, т.к. это КИХ фильтр ))))) Но переделывать уже не охота ) Удивительно, но при раздутом размере IAR по тактам таки победил 19498 тактов у IAR 19929 Cosmic Оба последних версий, у обоих оптимизация на скорость включена по максимуму. Added:Мужики, ну я не удержался и скомпилил это на AVR-GCC 6.3.0 10708 тактов оптимизация -O3 Да-даа, я знаю что это разные архитектуры и сравнивать вот так в лоб нельзя, но я просто оставлю эти цифры здесь )))))) полный код теста: Код #include <stdint.h>
typedef int16_t spx_int16_t; typedef uint16_t spx_uint16_t; typedef int32_t spx_int32_t; typedef uint32_t spx_uint32_t;
#define ABS(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute integer value. */ #define ABS16(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 16-bit value. */ #define MIN16(a,b) ((a) < (b) ? (a) : (b)) /**< Maximum 16-bit value. */ #define MAX16(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 16-bit value. */ #define ABS32(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 32-bit value. */ #define MIN32(a,b) ((a) < (b) ? (a) : (b)) /**< Maximum 32-bit value. */ #define MAX32(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 32-bit value. */
typedef spx_int16_t spx_word16_t; typedef spx_int32_t spx_word32_t; typedef spx_word32_t spx_mem_t; typedef spx_word16_t spx_coef_t; typedef spx_word16_t spx_lsp_t; typedef spx_word32_t spx_sig_t;
#define Q15ONE 32767
#define LPC_SCALING 8192 #define SIG_SCALING 16384 #define LSP_SCALING 8192. #define GAMMA_SCALING 32768. #define GAIN_SCALING 64 #define GAIN_SCALING_1 0.015625
#define LPC_SHIFT 13 #define LSP_SHIFT 13 #define SIG_SHIFT 14 #define GAIN_SHIFT 6
#define VERY_SMALL 0 #define VERY_LARGE32 ((spx_word32_t)2147483647) #define VERY_LARGE16 ((spx_word16_t)32767) #define Q15_ONE ((spx_word16_t)32767)
#define QCONST16(x,bits) ((spx_word16_t)(.5+(x)*(((spx_word32_t)1)<<(bits)))) #define QCONST32(x,bits) ((spx_word32_t)(.5+(x)*(((spx_word32_t)1)<<(bits))))
#define NEG16(x) (-(x)) #define NEG32(x) (-(x)) #define EXTRACT16(x) ((spx_word16_t)(x)) #define EXTEND32(x) ((spx_word32_t)(x)) #define SHR16(a,shift) ((a) >> (shift)) #define SHL16(a,shift) ((a) << (shift)) #define SHR32(a,shift) ((a) >> (shift)) #define SHL32(a,shift) ((a) << (shift)) #define PSHR16(a,shift) (SHR16((a)+((1<<((shift))>>1)),shift)) #define PSHR32(a,shift) (SHR32((a)+((EXTEND32(1)<<((shift))>>1)),shift)) #define VSHR32(a, shift) (((shift)>0) ? SHR32(a, shift) : SHL32(a, -(shift))) #define SATURATE16(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x))) #define SATURATE32(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
#define SHR(a,shift) ((a) >> (shift)) #define SHL(a,shift) ((spx_word32_t)(a) << (shift)) #define PSHR(a,shift) (SHR((a)+((EXTEND32(1)<<((shift))>>1)),shift)) #define SATURATE(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
#define ADD16(a,b) ((spx_word16_t)((spx_word16_t)(a)+(spx_word16_t)(b))) #define SUB16(a,b) ((spx_word16_t)(a)-(spx_word16_t)(b)) #define ADD32(a,b) ((spx_word32_t)(a)+(spx_word32_t)(b)) #define SUB32(a,b) ((spx_word32_t)(a)-(spx_word32_t)(b))
/* result fits in 16 bits */ #define MULT16_16_16(a,b) ((((spx_word16_t)(a))*((spx_word16_t)(b))))
/* (spx_word32_t)(spx_word16_t) gives TI compiler a hint that it's 16x16->32 multiply */ #define MULT16_16(a,b) (((spx_word32_t)(spx_word16_t)(a))*((spx_word32_t)(spx_word16_t)(b)))
#define MAC16_16(c,a,b) (ADD32((c),MULT16_16((a),(b)))) #define MULT16_32_Q12(a,b) ADD32(MULT16_16((a),SHR((b),12)), SHR(MULT16_16((a),((b)&0x00000fff)),12)) #define MULT16_32_Q13(a,b) ADD32(MULT16_16((a),SHR((b),13)), SHR(MULT16_16((a),((b)&0x00001fff)),13)) #define MULT16_32_Q14(a,b) ADD32(MULT16_16((a),SHR((b),14)), SHR(MULT16_16((a),((b)&0x00003fff)),14))
#define MULT16_32_Q11(a,b) ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11)) #define MAC16_32_Q11(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),11)), SHR(MULT16_16((a),((b)&0x000007ff)),11)))
#define MULT16_32_P15(a,b) ADD32(MULT16_16((a),SHR((b),15)), PSHR(MULT16_16((a),((b)&0x00007fff)),15)) #define MULT16_32_Q15(a,b) ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15)) #define MAC16_32_Q15(c,a,b) ADD32(c,ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15)))
#define MAC16_16_Q11(c,a,b) (ADD32((c),SHR(MULT16_16((a),(b)),11))) #define MAC16_16_Q13(c,a,b) (ADD32((c),SHR(MULT16_16((a),(b)),13))) #define MAC16_16_P13(c,a,b) (ADD32((c),SHR(ADD32(4096,MULT16_16((a),(b))),13)))
#define MULT16_16_Q11_32(a,b) (SHR(MULT16_16((a),(b)),11)) #define MULT16_16_Q13(a,b) (SHR(MULT16_16((a),(b)),13)) #define MULT16_16_Q14(a,b) (SHR(MULT16_16((a),(b)),14)) #define MULT16_16_Q15(a,b) (SHR(MULT16_16((a),(b)),15))
#define MULT16_16_P13(a,b) (SHR(ADD32(4096,MULT16_16((a),(b))),13)) #define MULT16_16_P14(a,b) (SHR(ADD32(8192,MULT16_16((a),(b))),14)) #define MULT16_16_P15(a,b) (SHR(ADD32(16384,MULT16_16((a),(b))),15))
#define MUL_16_32_R15(a,bh,bl) ADD32(MULT16_16((a),(bh)), SHR(MULT16_16((a),(bl)),15))
#define DIV32_16(a,b) ((spx_word16_t)(((spx_word32_t)(a))/((spx_word16_t)(b)))) #define PDIV32_16(a,b) ((spx_word16_t)(((spx_word32_t)(a)+((spx_word16_t)(b)>>1))/((spx_word16_t)(b)))) #define DIV32(a,b) (((spx_word32_t)(a))/((spx_word32_t)(b))) #define PDIV32(a,b) (((spx_word32_t)(a)+((spx_word16_t)(b)>>1))/((spx_word32_t)(b)))
////////////////// #define NVALUE 32 #define ORD 2
spx_word16_t x[NVALUE]; spx_coef_t num[ORD]; spx_word16_t y[NVALUE]; spx_mem_t mem[ORD];
void fir_mem16(const spx_word16_t *x, const spx_coef_t *num, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack) { int i,j; spx_word16_t xi,yi;
for (i=0;i<N;i++) { xi=x[i]; yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767)); for (j=0;j<ord-1;j++) { mem[j] = MAC16_16(mem[j+1], num[j],xi); } mem[ord-1] = MULT16_16(num[ord-1],xi); y[i] = yi; } }
void main() { asm("nop"); //for brakepoints fir_mem16(&x[0], &num[0], &y[0], NVALUE, ORD, &mem[0], 0x0000); asm("nop"); //for brakepoints }
--------------------
The truth is out there...
|
|
|
|
|
May 11 2017, 14:37
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816

|
Цитата(AHTOXA @ May 11 2017, 20:00)  Раз уж вы взялись тестировать, то укажите и полученный размер. (Ну и добавьте sdcc, для полноты картины). Кейл V5 Cortex-М0 L3 2673мт Program Size: Code=308 RO-data=224 RW-data=16 ZI-data=1152 Cortex-М3 L3 1651мт Program Size: Code=304 RO-data=224 RW-data=16 ZI-data=1152
Сообщение отредактировал Михась - May 11 2017, 14:39
|
|
|
|
Сообщений в этой теме
sigmaN Я просто не верю что IAR STM8 такой тупой! May 9 2017, 20:00 jcxz Цитата(sigmaN @ May 9 2017, 22:00) Cosmic... May 9 2017, 20:57 AHTOXA Посмотрите, что из вашего кода делает sdcc, и успо... May 10 2017, 06:51 Эдди Цитата(AHTOXA @ May 10 2017, 09:51) Посмо... May 11 2017, 11:52 sigmaN Грустно, потому что я в другом окне смотрю, что из... May 10 2017, 10:01 jcxz Цитата(sigmaN @ May 10 2017, 12:01) Груст... May 10 2017, 12:44 sigmaN Цели никакой нет и холливара тоже. Просто обидно ч... May 10 2017, 13:13 AHTOXA А как, по-вашему, должен выглядеть предложенный ва... May 10 2017, 18:21 jcxz Цитата(sigmaN @ May 10 2017, 15:13) Прост... May 10 2017, 20:01 sigmaN Выглядеть этот кусок может и должен в точности как... May 11 2017, 01:54 AHTOXA Цитата(sigmaN @ May 11 2017, 06:54) Выгля... May 11 2017, 06:20 jcxz Цитата(sigmaN @ May 11 2017, 03:54) Приде... May 11 2017, 08:38 sigmaN Тоже потом подумал про испорченный A. Однако же ни... May 11 2017, 08:34    Михась Цитата(AHTOXA @ May 12 2017, 00:05) Это н... May 12 2017, 03:40 sigmaN Cosmic для стм8 нынче абсолютно свободен и без огр... May 11 2017, 13:15 Эдди Космик только под мастдайку — не годится. May 11 2017, 13:24 sigmaN Странно, но космик в удобном виде размеры не вывод... May 12 2017, 10:44 sigmaN Мой товарищ сделал задержку 1us вот таким не хитры... May 13 2017, 17:35 jcxz Цитата(sigmaN @ May 13 2017, 19:35) Рассл... May 14 2017, 06:05  Den64 Цитата(jcxz @ May 14 2017, 09:05) Не поня... May 14 2017, 06:39   jcxz Цитата(Den64 @ May 14 2017, 08:39) Нескол... May 14 2017, 18:36    Den64 Цитата(jcxz @ May 14 2017, 21:36) Это пон... May 14 2017, 18:59 sigmaN ЦитатаЭто из игры fallout. Что это за приложение д... May 14 2017, 20:17 AHTOXA Мне фотки видны.
Он заменил 16 nop-ов на два вызов... May 14 2017, 21:16 jcxz Цитата(sigmaN @ May 14 2017, 22:17) Короч... May 15 2017, 09:38 sigmaN Да, я тоже перепроверил, времянка не соблюдена. Дл... May 14 2017, 21:27 sigmaN Как раз эта часть отлично описана в посте со скрин... May 15 2017, 14:15 jcxz Да похоже так и есть - реально тупой
Функцию, ... Jun 12 2017, 13:36 Эдди Синус на STM8? Зачем???????????????? Jun 12 2017, 14:43 jcxz Цитата(Эдди @ Jun 12 2017, 16:43) Синус н... Jun 12 2017, 17:27 Эдди ШИМ — штука хорошая, но синусоида элементарно по т... Jun 13 2017, 05:25 jcxz Цитата(Эдди @ Jun 13 2017, 07:25) ШИМ ... Jun 13 2017, 06:26 jcxz Цитата(sigmaN @ May 9 2017, 23:00) ЗАЧЕМ?... Jul 25 2017, 11:44 sigmaN ммм, неплохо, неплохо! Затестим обязательно... Jul 26 2017, 19:26 VladislavS Пример из первого сообщения. STM8 Series 3.10.1
Ка... Jul 31 2017, 05:53
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|