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

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

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

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

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

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


 
Опции темы
Непрочитано 08.11.2010, 01:39  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию Не очень верится, там одна команда перехода выполняется за ТРИ такта,

всё-таки 5-каскадный конвейер сказывается, ПЛЮС ещё четыре команды. Явно не может быть меньше, чем 7 тактов, да ещё неявные пайплайновые конфликты. Вот вроде бы и LDRB выполняется за ТРИ такта. Уже девять получается. А у меня ддс работает на 8 тактах.

Да, я предлагал сравнить программный ддс на стм8 и на авр одного, так сказать, веса, последний легко выиграл. Сравните 13 и 8 тактов.

Теперь вы предлагаете сравнить 32-разрядный МС и 8-разрядный МС, не очень-то честно на мой взгляд, но последний и здесь выиграл! Сравните 9 и 8 тактов. Даже проигрыш по очкам был бы почётен, но победа...
Реклама:
=GM= вне форума  
Непрочитано 08.11.2010, 02:00  
Gnider
Почётный гражданин KAZUS.RU
 
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
Gnider на пути к лучшему
По умолчанию Re: Не очень верится, там одна команда перехода выполняется за ТРИ такта,

Сообщение от =GM= Посмотреть сообщение
всё-таки 5-каскадный конвейер сказывается, ПЛЮС ещё четыре команды. Явно не может быть меньше, чем 7 тактов, да ещё неявные пайплайновые конфликты. Вот вроде бы и LDRB выполняется за ТРИ такта. Уже девять получается. А у меня ддс работает на 8 тактах.

Да, я предлагал сравнить программный ддс на стм8 и на авр одного, так сказать, веса, последний легко выиграл. Сравните 13 и 8 тактов.

Теперь вы предлагаете сравнить 32-разрядный МС и 8-разрядный МС, не очень-то честно на мой взгляд, но последний и здесь выиграл! Сравните 9 и 8 тактов. Даже проигрыш по очкам был бы почётен, но победа...
Ни конвейер ни неявные пайплайновые конфликты,а так же всякие флуктуации непричем. Проверил в железе - 7.5 тактов на итерацию.

А сравнивать вполне честно - цена,корпуса,периферия.
Gnider вне форума  
Непрочитано 08.11.2010, 02:24  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию Не очень верится, там одна команда перехода выполняется за ТРИ такта,

Вы ж говорили 5...Теперь уже 7.5 стало? Это как? Одна команда за полтакта выполняется? Чепуха какая-то.
=GM= вне форума  
Непрочитано 08.11.2010, 02:35  
Gnider
Почётный гражданин KAZUS.RU
 
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
Gnider на пути к лучшему
По умолчанию Re: Не очень верится, там одна команда перехода выполняется за ТРИ такта,

Сообщение от =GM= Посмотреть сообщение
Вы ж говорили 5...Теперь уже 7.5 стало? Это как? Одна команда за полтакта выполняется? Чепуха какая-то.
Ну если поделить время выполнения большого кол-во циклов то в среднем с командой перехода,еще может чем получается примерно 7.5 тактов.
Gnider вне форума  
Непрочитано 08.11.2010, 03:26  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию Всё врут календари

Нашёл время выполнения команд армов

LDRB = 1S +1N + 1I = 3 такта
STR = 2S = 2 такта
ADDS = 1S = 1 такт
ASRS = 1S = 1 такт (тут бы надо уточнить)
B = 2S + 1N = 3 такта

Итого: 1 + 1 + 3 + 2 + 3 = 10 тактов.

Уточняйте свои измерения. Например, замерьте время выполнения, добавьте ещё одну команду ADDS, замерьте ещё раз. Ну, не буду учить, сами знаете.

Чудеса, АВР выигрывает у АРМа вчистую.
=GM= вне форума  
Непрочитано 08.11.2010, 08:46  
Gnider
Почётный гражданин KAZUS.RU
 
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
Gnider на пути к лучшему
По умолчанию Re: Всё врут календари

Сообщение от =GM= Посмотреть сообщение
Нашёл время выполнения команд армов

LDRB = 1S +1N + 1I = 3 такта
STR = 2S = 2 такта
ADDS = 1S = 1 такт
ASRS = 1S = 1 такт (тут бы надо уточнить)
B = 2S + 1N = 3 такта

Итого: 1 + 1 + 3 + 2 + 3 = 10 тактов.

Уточняйте свои измерения. Например, замерьте время выполнения, добавьте ещё одну команду ADDS, замерьте ещё раз. Ну, не буду учить, сами знаете.

Чудеса, АВР выигрывает у АРМа вчистую.

Ну что тут замерять? Количество тактов я поделил на кол-во прогонов. Получилось 7.5. Хотите сами проверьте. Так же проверить может кто угодно. Исходняк то один на всех.
А программа написана на Си.
Gnider вне форума  
Непрочитано 08.11.2010, 08:48  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

iIi_WARHEAD_iIi,
Вчера не получилось. Но сегодня исправлюсь.
В общем даю принцип.
Код:
// определение типа С99, на самом деле лучше вынесите это в stdint.h
// соответственно будет #include ‹stdint.h›
typedef unsigned char uint8_t;

// определяем структуру для работы с битами как с битовыми полями
typedef struct
    {
    uint8_t B0      :1;
    uint8_t B1      :1;
    uint8_t B2      :1;
    uint8_t B3      :1;
    uint8_t B4      :1;
    uint8_t B5      :1;
    uint8_t B6      :1;
    uint8_t B7      :1;    
    } bits_t;

// определяем структуру порта
typedef volatile struct
{
    union
    {
        uint8_t ODR;
        bits_t  ODRb;
    };
    union
    {
        uint8_t IDR;
        bits_t  IDRb;
    };
    union
    {
        uint8_t DDR;
        bits_t  DDRb;
    };
    union
    {
        uint8_t CR1;
        bits_t  CR1b;
    };
    union
    {
        uint8_t CR2;
        bits_t  CR2b;
    };
} GPIO_t;

// определяем указатели на порты
#define	pGPIOA	((GPIO_t*)0x5000)
#define	pGPIOB	((GPIO_t*)0x5005)
#define	pGPIOC	((GPIO_t*)0x500A)
// ну и т.д., добавьте самостоятельно остальное

// собственно регистры порта, я обозвал их как у АВР. Можете назвать как угодно.
// Но в стиле STM8 если PODR еще нечего, то вот PIDR мне не понравился :)
#define PORTA      pGPIOA-›ODR
#define PORTA0     pGPIOA-›ODRb.B0
#define PORTA1     pGPIOA-›ODRb.B1
#define PORTA2     pGPIOA-›ODRb.B2
#define PORTA3     pGPIOA-›ODRb.B3
#define PORTA4     pGPIOA-›ODRb.B4
#define PORTA5     pGPIOA-›ODRb.B5
#define PORTA6     pGPIOA-›ODRb.B6
#define PORTA7     pGPIOA-›ODRb.B7

#define PINA      pGPIOA-›IDR
#define PINA0     pGPIOA-›IDRb.B0
#define PINA1     pGPIOA-›IDRb.B1
#define PINA2     pGPIOA-›IDRb.B2
#define PINA3     pGPIOA-›IDRb.B3
#define PINA4     pGPIOA-›IDRb.B4
#define PINA5     pGPIOA-›IDRb.B5
#define PINA6     pGPIOA-›IDRb.B6
#define PINA7     pGPIOA-›IDRb.B7

#define DDRA      pGPIOA-›DDR
#define DDRA0     pGPIOA-›DDRb.B0
#define DDRA1     pGPIOA-›DDRb.B1
#define DDRA2     pGPIOA-›DDRb.B2
#define DDRA3     pGPIOA-›DDRb.B3
#define DDRA4     pGPIOA-›DDRb.B4
#define DDRA5     pGPIOA-›DDRb.B5
#define DDRA6     pGPIOA-›DDRb.B6
#define DDRA7     pGPIOA-›DDRb.B7

// для остальных аналогично

// теперь функции конфигурации порта
typedef enum
{
 OutLoSpeed = ((uint8_t)0x00),
 OutHiSpeed = ((uint8_t)0x01) 
} OutSpeed_t;

typedef enum
{
 OutOpenDrain = ((uint8_t)0x00),
 OutPushPull  = ((uint8_t)0x01) 
} OutMode_t;

typedef enum
{
 InpFloating  = ((uint8_t)0x00),
 InpPullup    = ((uint8_t)0x01) 
} InpMode_t;

typedef enum
{
 InpEintDis = ((uint8_t)0x00),
 InpEintEn  = ((uint8_t)0x01) 
} InpEint_t;

@inline void GPIO_ConfigOutput(GPIO_t *pGPIO,
                               uint8_t pin,
                               OutSpeed_t speed,      // скорость
                               OutMode_t mode)
{
    pGPIO-›DDR |= (uint8_t)(1‹‹(pin & 0x07));
    if(mode == OutOpenDrain) pGPIO-›CR1 &= (uint8_t)(~ (1‹‹(pin & 0x07)));
        else pGPIO-›CR1 |= (uint8_t)(1‹‹(pin & 0x07));

    if(speed == OutLoSpeed) pGPIO-›CR2 &= (uint8_t)(~(1‹‹(pin & 0x07)));
        else pGPIO-›CR2 |= (uint8_t)(1‹‹(pin & 0x07));
        
}

@inline void GPIO_ConfigInput(GPIO_t *pGPIO,
                              uint8_t pin,
                              InpMode_t mode,
                              InpEint_t  inten)
    {
        if(inten == InpEintDis) pGPIO-›CR2 &= (uint8_t)(~(1‹‹(pin & 0x07)));                
            else pGPIO-›CR2 |= (uint8_t)(1‹‹(pin & 0x07));

        if(mode == InpFloating) pGPIO-›CR1 &= (uint8_t)(~(1‹‹(pin & 0x07)));    
            else pGPIO-›CR1 |= (uint8_t)(1‹‹(pin & 0x07));
            
        pGPIO-›DDR &= (uint8_t)(~(1‹‹(pin & 0x07)));   
    }
// они принудительно инлайнятся
// как то так в общем
В результате с выводами работаем так
Код:
DDRA0 = 1;
DDRA1 = 1;
// или
DDRA = 0x03;
PORTA0 = 1;
PORTA0 = ~PORTA0;
#define LED PORTA1
LED = 1;
LED = ~LED;
Удачи в освоении
kison вне форума  
Эти 5 пользователя(ей) сказали Спасибо kison за это сообщение:
andries5 (20.11.2010), Highlander (28.01.2011), iIi_WARHEAD_iIi (08.11.2010), luxin (21.07.2011), serj_neo (06.08.2011)
Непрочитано 08.11.2010, 09:12  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от =GM= Посмотреть сообщение
Чудеса, АВР выигрывает у АРМа вчистую.
Удлините таблицу. До 512 байт. Это как раз для 8 бит ЦАП, для минимальных искажений синусоиды. И посчитайте снова.
Да и считаете Вы все равно неправильно.
Gnider для кортекса дает, там тайминги другие. Впрочем Вы и для АРМ7 считаете неверно. Например
Сообщение от =GM= Посмотреть сообщение
LDRB = 1S +1N + 1I = 3 такта
Такты вовсе не суммируются. Точнее далеко не всегда. Там от цели - приемника зависит, если модифицируется R15 например нужно 1 такт добавить. Вы же в любом случае добавляете Так что не выигрывает АВР по тактам ни у кортекса, ни у АРМ7.
А если увеличить табличку для синуса - проиграет всухую. Да и на неувеличенной - равновесие по тактам далеко от равновесия по выборкам. Учтите - LPC11xx по ценам такой же, как младшие модели АВР, например М48.

Последний раз редактировалось kison; 08.11.2010 в 09:15.
kison вне форума  
Непрочитано 08.11.2010, 09:52  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от =GM= Посмотреть сообщение
А у меня ддс работает на 8 тактах.
8 кстати интересно. Выше было 10 тактов. При небольшой модификации выйдет 9. Как получить 8?
kison вне форума  
Непрочитано 08.11.2010, 11:08  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

согласен сам когда-то делал, было вроде 9 тактов
сложение 32 бита 4 такта
косвенное чтение 2 такта
вывод в порт 1 такт
безусловный переход 2 такта
итого 9...
zheleznjakov вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
KiCAD-объявления и впечатления al_dan KiCAD 32 03.10.2016 17:02
Народ, посмотрите quasm, Как ваши впечатления? suri Proteus, KiCAD и другие ECAD 5 14.10.2009 11:57


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


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