реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Я просто не верю что IAR STM8 такой тупой!, Ведь это же всегда был один из самых качественных компиляторов
sigmaN
сообщение May 15 2017, 14:15
Сообщение #31


I WANT TO BELIEVE
******

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



Как раз эта часть отлично описана в посте со скринами
Цитата
Мой товарищ сделал задержку 1us вот таким не хитрым способом
Код
#define ONE_US_DELAY nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();nop();no
p();nop();nop()

Этот nop() есть ни что иное как макрос разворачивающийся в asm("nop")

Макрос nop(), его конкретное определение можно найти в файле STM8S_StdPeriph_Lib\Libraries\STM8S_StdPeriph_Driver\inc\stm8s.h
Код
/*============================== Interrupts ====================================*/
#ifdef _RAISONANCE_
#include <intrins.h>
#define enableInterrupts()    _rim_()  /* enable interrupts */
#define disableInterrupts()   _sim_()  /* disable interrupts */
#define rim()                 _rim_()  /* enable interrupts */
#define sim()                 _sim_()  /* disable interrupts */
#define nop()                 _nop_()  /* No Operation */
#define trap()                _trap_() /* Trap (soft IT) */
#define wfi()                 _wfi_()  /* Wait For Interrupt */
#define halt()                _halt_() /* Halt */
#elif defined(_COSMIC_)
#define enableInterrupts()    {_asm("rim\n");}  /* enable interrupts */
#define disableInterrupts()   {_asm("sim\n");}  /* disable interrupts */
#define rim()                 {_asm("rim\n");}  /* enable interrupts */
#define sim()                 {_asm("sim\n");}  /* disable interrupts */
#define nop()                 {_asm("nop\n");}  /* No Operation */
#define trap()                {_asm("trap\n");} /* Trap (soft IT) */
#define wfi()                 {_asm("wfi\n");}  /* Wait For Interrupt */
#define halt()                {_asm("halt\n");} /* Halt */
#else /*_IAR_*/
#include <intrinsics.h>
#define enableInterrupts()    __enable_interrupt()   /* enable interrupts */
#define disableInterrupts()   __disable_interrupt()  /* disable interrupts */
#define rim()                 __enable_interrupt()   /* enable interrupts */
#define sim()                 __disable_interrupt()  /* disable interrupts */
#define nop()                 __no_operation()       /* No Operation */
#define trap()                __trap()               /* Trap (soft IT) */
#define wfi()                 __wait_for_interrupt() /* Wait For Interrupt */
#define halt()                __halt()               /* Halt */
#endif /*_RAISONANCE_*/


Ну и таки уже разобрались, что IAR уменьшил кол-во нопов ради размера и везде где встречается макрос он вставил два вызова этой своей авто сгенерированной функции с нопами.
Времянка конечно же не совпала, но прикольно всё равно.

Настройки проекта в IAR для повторения.
 Р В Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 68%
Прикрепленное изображение
535 x 495 (69.86 килобайт)



--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 12 2017, 13:36
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Да похоже так и есть - реально тупой laughing.gif
Функцию, вычисляющую синус, переписал на асм - получил время её выполнения в ~4.5 раза меньше!
Без изменения алгоритма. И, естественно: компиляция си-функции с оптимизацией High(speed).
Go to the top of the page
 
+Quote Post
Эдди
сообщение Jun 12 2017, 14:43
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Синус на STM8? Зачем????????????????
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 12 2017, 17:27
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Эдди @ Jun 12 2017, 16:43) *
Синус на STM8? Зачем????????????????

Затем же зачем в его таймерах есть ШИМ wink.gif
Go to the top of the page
 
+Quote Post
Эдди
сообщение Jun 13 2017, 05:25
Сообщение #35


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



ШИМ — штука хорошая, но синусоида элементарно по таблице считается!
Не хватало еще флоатов в 8-битных МК!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 13 2017, 06:26
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Эдди @ Jun 13 2017, 07:25) *
ШИМ — штука хорошая, но синусоида элементарно по таблице считается!

По таблице? И каков её размер? И какова точность?
И причём тут "синусоида" если я пишу про "синус"? Или Вы таблицу строите для только одной частоты? Ну да - это известный чайниковский метод biggrin.gif

Цитата(Эдди @ Jun 13 2017, 07:25) *
Не хватало еще флоатов в 8-битных МК!

А при чём тут флоаты вообще??? wacko.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 25 2017, 11:44
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(sigmaN @ May 9 2017, 23:00) *
ЗАЧЕМ? Зачем он делает всё это????

Посмотрите новый IAR 3.10 (есть на ftp). Он уже гораздо лучше компилит и не делает многих тех странностей, что старый.
По крайней мере, там где старый генерил полный маразм:
Код
     95            } while (++smplN < ncell(smpl));
   \   000063 A6 01        LD        A, #0x1
   \   000065 BB ..        ADD       A, S:smplN
   \   000067 B7 ..        LD        S:smplN, A
   \   000069 B6 ..        LD        A, S:smplN
   \   00006B A1 10        CP        A, #0x10
   \   00006D 25 A7        JRC       L:??McGenerate_0

новый для того же места выдаёт вполне разумно (я бы на асме так же написал-бы):
Код
     95            } while (++smplN < ncell(smpl));
   \   00005F 3C ..        INC       S:smplN
   \   000061 B6 ..        LD        A, S:smplN
   \   000063 A1 10        CP        A, #0x10
   \   000065 25 AF        JRC       L:??McGenerate_0

Ну и много других мест.
И это даже при "Low" оптимизации.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jul 26 2017, 19:26
Сообщение #38


I WANT TO BELIEVE
******

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



ммм, неплохо, неплохо! Затестим обязательно!


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jul 31 2017, 05:53
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Пример из первого сообщения. STM8 Series 3.10.1
Как то так
 Р В Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 78%
Прикрепленное изображение
783 x 281 (11.7 килобайт)


И даже вот так
 Р В Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 78%
Прикрепленное изображение
782 x 267 (11.91 килобайт)


Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 13:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.04484 секунд с 7
ELECTRONIX ©2004-2016