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

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

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

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

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

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


 
Опции темы
Непрочитано 25.02.2013, 01:54  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

gary2007, я конечно понимаю, что по-английски Вам не очень удобно, но в данном случае оно того стоит - Mastering stack and heap for system reliability - очень рекомендую!
Реклама:
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Сказали "Спасибо" tempora
gary2007 (25.02.2013)
Непрочитано 25.02.2013, 02:33  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Спасибо, изучим.
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 25.02.2013, 11:33  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от SasaVitebsk Посмотреть сообщение
Например умножение long long чисел займёт десятки тактов, а умножение double тысячи либо десятки тысяч. Для 8-битного контроллера ....
long long = это 8 байт умножить на 8 байт,
а double - 7 байт мантиссы на 7 байт мантиссы (тем более мантисса всегда нормализованная) - так что откуда там тысячи и десятки тысяч тактов? Даже если нет аппартного умножения байт на байт, то все гораздо быстрее работает.

Не пугайте людей !!!.
Boba_spb вне форума  
Непрочитано 25.02.2013, 22:54  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от Boba_spb Посмотреть сообщение
Не пугайте людей !!!.
провёл исследование мелкое ...
double * ~ 1576 тактов
double / ~ 1783 тактов
long long int * ~ 1272 такта
long long int / ~ 1645 такта
Любопытно что на двух процах сделал: atmega168 и at90s4414.
Как известно, последний аппаратно умножать неумеет ... Результаты почти идентичные IAR AVR 6.12.1. Честно говоря последнее слегка удивляет.

Иными словами, вы оказались правы ...
SasaVitebsk вне форума  
Непрочитано 25.02.2013, 23:08  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Уж что то многовато, хотя ... Если на СИ писали эту арифметику, а не АСМе, да исчо студенту дали в качестве контрольной, то все может быть.
Boba_spb вне форума  
Непрочитано 25.02.2013, 23:37  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Я ж не идиот на ASM писать и так времени в обрез ... ) На си там ровно 3 строчки в тесте было. ) Даже студенту трудно ошибиться ... )) Разве что volatile не поставил бы ... ))
SasaVitebsk вне форума  
Непрочитано 25.02.2013, 23:45  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Я имел ввиду-компилятор как разворачивает всю эту арифметику.

Когда то давно пришлось писать float для MCS51 - ибо библиотеки были исчо те.
Boba_spb вне форума  
Непрочитано 26.02.2013, 00:16  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Да успокойтесь вы за компилятор волноваться ... Сейчас специально для вас взял фильтр движения свой... Он у меня на ASM написан, так как в прерывании и 6 двигателей на 5 кгц... Там ШИМ и АЦП фиьтрация АЦП фильтрация движения с дроблением шага ... + can, ну короче трохи напряжно ... А некоторые прерывания короткие ... синус вблизи максимумов ... короче напряжно ... Ну и написал ... Сейчас сделал обратный реверс (честно говоря не проверял на правильность) и сделал компиляцию ... Полюбуйтесь ...
Вот я ... возился ...
Код:
PUBLIC	iir8

#define		wl				r16
#define		wh				r17
#define		dl				r18
#define		dh				r19
#define		iter			r20

#define		ZH				r31
#define		ZL				r30


		RSEG  CODE

// Расчёт фильтра IIR iter звеньев
// int16_t iir8(int16_t *filtr, uint8_t iter);
iir8:
		movw	ZH:ZL,wh:wl			; Занесли адрес начала в Z
		mov		iter,dl				; Загрузили число итераций фильтра
		ld		wl,Z+				; Загрузили рабочее число
		ld		wh,Z+
iir8_с:
		ld		dl,Z				; Загрузили следующее число
		ldd		dh,Z+1
		sub		wl,dl				; вычли
		sbc		wh,dh
		asr		wh					; поделили на 2
		ror		wl
		asr		wh					; поделили на 4
		ror		wl
		add		wl,dl				; прибавили
		adc		wh,dh
		st		Z+,wl				; сохранили
		st		Z+,wh
		dec		iter				; следующая итерация
		brne	iir8_с				; если не все итерации, то повторить
		sub		wl,dl				; нашли микростеп и вернули его
		sbc		wh,dh		
		ret

END
Ну вот вам компилятор
Код:
##################################################  #############################
#                                                                             #
#                                                       25/Feb/2013  22:04:48 #
# IAR Atmel AVR C/C++ Compiler V5.10A/W32, Evaluation Version                 #
# Copyright 1996-2008 IAR Systems. All rights reserved.                       #
#                                                                             #
#    Source file  =  D:\work\AVR IAR C\Traktor\kd8096m\filtr_iir8.c           #
#    Command line =  "D:\work\AVR IAR C\Traktor\kd8096m\filtr_iir8.c"         #
#                    --cpu=can128 -ms -o "D:\work\AVR IAR                     #
#                    C\Traktor\kd8096m\Debug\Obj\" -lCN "D:\work\AVR IAR      #
#                    C\Traktor\kd8096m\Debug\List\" -y                        #
#                    --initializers_in_flash -s9 --no_cross_call --debug      #
#                    -DENABLE_BIT_DEFINITIONS --do_cross_call -e -I           #
#                    "C:\Program Files\IAR Systems\Embedded Workbench 5.0     #
#                    Evaluation\avr\INC\" -I "C:\Program Files\IAR            #
#                    Systems\Embedded Workbench 5.0                           #
#                    Evaluation\avr\INC\CLIB\" --eeprom_size 4096             #
#                    --lock_regs=7                                            #
#    List file    =  D:\work\AVR IAR C\Traktor\kd8096m\Debug\List\filtr_iir8. #
#                    lst                                                      #
#    Object file  =  D:\work\AVR IAR C\Traktor\kd8096m\Debug\Obj\filtr_iir8.r #
#                    90                                                       #
#                                                                             #
#                                                                             #
##################################################  #############################

D:\work\AVR IAR C\Traktor\kd8096m\filtr_iir8.c
      1          #include "inavr.h"
      2          #include "stdint.h"
      3          

   \                                 In  segment CODE, align 2, keep-with-next
      4          uint16_t	iir8(uint16_t *data, uint8_t iter)
   \                     iir8:
      5          {
      6          	int16_t	w, d;
      7          
      8          	w = *data++;
   \   00000000   01F8               MOVW    R31:R30, R17:R16
   \   00000002   9141               LD      R20, Z+
   \   00000004   9151               LD      R21, Z+
      9          	for(; iter==0; iter--)
   \   00000006   2322               TST     R18
   \   00000008   F461               BRNE    ??iir8_0
     10          	{
     11          	  d = *data;
   \   0000000A   8160               LD      R22, Z
   \   0000000C   8171               LDD     R23, Z+1
     12          	  w -= d;
     13          	  w ››= 2;
     14          	  w += d;
   \   0000000E   1B46               SUB     R20, R22
   \   00000010   0B57               SBC     R21, R23
   \   00000012   9555               ASR     R21
   \   00000014   9547               ROR     R20
   \   00000016   9555               ASR     R21
   \   00000018   9547               ROR     R20
   \   0000001A   0F46               ADD     R20, R22
   \   0000001C   1F57               ADC     R21, R23
     15          	  *data++ = w;
   \   0000001E   8340               ST      Z, R20
   \   00000020   8351               STD     Z+1, R21
     16          	}
     17          	w -= d;
     18          	return(w);
   \                     ??iir8_0:
   \   00000022   1B46               SUB     R20, R22
   \   00000024   0B57               SBC     R21, R23
   \   00000026   018A               MOVW    R17:R16, R21:R20
   \   00000028   9508               RET
     19          };

   Maximum stack usage in bytes:

     Function CSTACK RSTACK
     -------- ------ ------
     iir8         0      2


   Segment part sizes:

     Function/Label Bytes
     -------------- -----
     iir8             42

 
 42 bytes in segment CODE
 
 42 bytes of CODE memory

Errors: none
Warnings: none
SasaVitebsk вне форума  
Непрочитано 26.02.2013, 00:18  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

У меня на меге8 такая строчка :
cnt_ovf =TCNT1 + corr_L * cnt_cmp + cnt_ovf * 65536;
выполняется за 996 тактов.

cnt_cmp, cnt_ovf переменные unsigned long long int

Код, страшно смотреть
PHP код:
    453             //подсчет суммарных тиков за весь период
    
454            cnt_ovf =TCNT1 corr_L cnt_cmp cnt_ovf 65536;
   \   
00000032   9100....           LDS     R16corr_L
   
\   00000036   9110....           LDS     R17, (corr_L 1)
   \   
0000003A   E020               LDI     R180
   
\   0000003C   E030               LDI     R190
   
\   0000003E   E040               LDI     R200
   
\   00000040   E050               LDI     R210
   
\   00000042   E060               LDI     R220
   
\   00000044   E070               LDI     R230
   
\   00000046   ....               LDI     R26LOW(cnt_cmp)
   \   
00000048   ....               LDI     R27, (cnt_cmp) ›› 8
   
\   0000004A   ....               RCALL   ?LL_MUL_L12
   
\   0000004C   8708               STD     Y+8R16
   
\   0000004E   8719               STD     Y+9R17
   
\   00000050   872A               STD     Y+10R18
   
\   00000052   873B               STD     Y+11R19
   
\   00000054   874C               STD     Y+12R20
   
\   00000056   875D               STD     Y+13R21
   
\   00000058   876E               STD     Y+14R22
   
\   0000005A   877F               STD     Y+15R23
   
\   0000005C   ....               LDI     R30LOW(cnt_ovf)
   \   
0000005E   ....               LDI     R31, (cnt_ovf) ›› 8
   
\   00000060   8100               LD      R16Z
   
\   00000062   8111               LDD     R17Z+1
   
\   00000064   8122               LDD     R18Z+2
   
\   00000066   8133               LDD     R19Z+3
   
\   00000068   8144               LDD     R20Z+4
   
\   0000006A   8155               LDD     R21Z+5
   
\   0000006C   8166               LDD     R22Z+6
   
\   0000006E   8177               LDD     R23Z+7
   
\   00000070   ....               LDI     R26LOW(__Constant_10000_0)
   \   
00000072   ....               LDI     R27, (__Constant_10000_0) ›› 8
   
\   00000074   ....               RCALL   ?LL_MUL_L12
   
\   00000076   8308               ST      YR16
   
\   00000078   8319               STD     Y+1R17
   
\   0000007A   832A               STD     Y+2R18
   
\   0000007C   833B               STD     Y+3R19
   
\   0000007E   834C               STD     Y+4R20
   
\   00000080   835D               STD     Y+5R21
   
\   00000082   836E               STD     Y+6R22
   
\   00000084   837F               STD     Y+7R23
   
\   00000086   B50C               IN      R160x2C
   
\   00000088   B51D               IN      R170x2D
   
\   0000008A   E020               LDI     R180
   
\   0000008C   E030               LDI     R190
   
\   0000008E   E040               LDI     R200
   
\   00000090   E050               LDI     R210
   
\   00000092   E060               LDI     R220
   
\   00000094   E070               LDI     R230
   
\   00000096   01FE               MOVW    R31:R30R29:R28
   
\   00000098   9638               ADIW    R31:R308
   
\   0000009A   ....               RCALL   ?LL_ADD_L12
   
\   0000009C   01FE               MOVW    R31:R30R29:R28
   
\   0000009E   ....               RCALL   ?LL_ADD_L12
   
\   000000A0   ....               LDI     R30LOW(cnt_ovf)
   \   
000000A2   ....               LDI     R31, (cnt_ovf) ›› 8
   
\   000000A4   8300               ST      ZR16
   
\   000000A6   8311               STD     Z+1R17
   
\   000000A8   8322               STD     Z+2R18
   
\   000000AA   8333               STD     Z+3R19
   
\   000000AC   8344               STD     Z+4R20
   
\   000000AE   8355               STD     Z+5R21
   
\   000000B0   8366               STD     Z+6R22
   
\   000000B2   8377               STD     Z+7R23 
__________________
Мелочи не решают главного. Они решают всё!

Последний раз редактировалось gary2007; 26.02.2013 в 00:26.
gary2007 вне форума  
Непрочитано 26.02.2013, 00:26  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: IAR Embedded Workbench

Сообщение от gary2007 Посмотреть сообщение
У меня на меге8 такая строчка :
"cnt_ovf =TCNT1 + ... + cnt_ovf * 65536;" выполняется за 996 тактов.
А зачем же умножать на 65636?! 65'536 это же то же самое, что и 0x10000 или 0b1'00000000'00000000, тут умножение вообще незачем.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подниму тему WinAVR vs IAR oleg110592 Микроконтроллеры, АЦП, память и т.д 5 24.10.2015 14:06


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


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