08.11.2010, 01:39
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Не очень верится, там одна команда перехода выполняется за ТРИ такта,
всё-таки 5-каскадный конвейер сказывается, ПЛЮС ещё четыре команды. Явно не может быть меньше, чем 7 тактов, да ещё неявные пайплайновые конфликты. Вот вроде бы и LDRB выполняется за ТРИ такта. Уже девять получается. А у меня ддс работает на 8 тактах.
Да, я предлагал сравнить программный ддс на стм8 и на авр одного, так сказать, веса, последний легко выиграл. Сравните 13 и 8 тактов.
Теперь вы предлагаете сравнить 32-разрядный МС и 8-разрядный МС, не очень-то честно на мой взгляд, но последний и здесь выиграл! Сравните 9 и 8 тактов. Даже проигрыш по очкам был бы почётен, но победа...
|
|
|
|
08.11.2010, 02:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: Не очень верится, там одна команда перехода выполняется за ТРИ такта,
Сообщение от =GM=
|
всё-таки 5-каскадный конвейер сказывается, ПЛЮС ещё четыре команды. Явно не может быть меньше, чем 7 тактов, да ещё неявные пайплайновые конфликты. Вот вроде бы и LDRB выполняется за ТРИ такта. Уже девять получается. А у меня ддс работает на 8 тактах.
Да, я предлагал сравнить программный ддс на стм8 и на авр одного, так сказать, веса, последний легко выиграл. Сравните 13 и 8 тактов.
Теперь вы предлагаете сравнить 32-разрядный МС и 8-разрядный МС, не очень-то честно на мой взгляд, но последний и здесь выиграл! Сравните 9 и 8 тактов. Даже проигрыш по очкам был бы почётен, но победа...
|
Ни конвейер ни неявные пайплайновые конфликты,а так же всякие флуктуации непричем. Проверил в железе - 7.5 тактов на итерацию.
А сравнивать вполне честно - цена,корпуса,периферия.
|
|
|
|
08.11.2010, 02:24
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Не очень верится, там одна команда перехода выполняется за ТРИ такта,
Вы ж говорили 5...Теперь уже 7.5 стало? Это как? Одна команда за полтакта выполняется? Чепуха какая-то.
|
|
|
|
08.11.2010, 02:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: Не очень верится, там одна команда перехода выполняется за ТРИ такта,
Сообщение от =GM=
|
Вы ж говорили 5...Теперь уже 7.5 стало? Это как? Одна команда за полтакта выполняется? Чепуха какая-то.
|
Ну если поделить время выполнения большого кол-во циклов то в среднем с командой перехода,еще может чем получается примерно 7.5 тактов.
|
|
|
|
08.11.2010, 03:26
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Всё врут календари
Нашёл время выполнения команд армов
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, замерьте ещё раз. Ну, не буду учить, сами знаете.
Чудеса, АВР выигрывает у АРМа вчистую.
|
|
|
|
08.11.2010, 08:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
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. Хотите сами проверьте. Так же проверить может кто угодно. Исходняк то один на всех.
А программа написана на Си.
|
|
|
|
08.11.2010, 08:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
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; |
Удачи в освоении
|
|
|
Эти 5 пользователя(ей) сказали Спасибо kison за это сообщение:
|
|
|
08.11.2010, 09:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от =GM=
|
Чудеса, АВР выигрывает у АРМа вчистую.
|
Удлините таблицу. До 512 байт. Это как раз для 8 бит ЦАП, для минимальных искажений синусоиды. И посчитайте снова. ![Улыбка](images/smilies/icon_smile.gif)
Да и считаете Вы все равно неправильно.
Gnider для кортекса дает, там тайминги другие. Впрочем Вы и для АРМ7 считаете неверно. Например
Сообщение от =GM=
|
LDRB = 1S +1N + 1I = 3 такта
|
Такты вовсе не суммируются. Точнее далеко не всегда. Там от цели - приемника зависит, если модифицируется R15 например нужно 1 такт добавить. Вы же в любом случае добавляете ![Улыбка](images/smilies/icon_smile.gif) Так что не выигрывает АВР по тактам ни у кортекса, ни у АРМ7.
А если увеличить табличку для синуса - проиграет всухую. Да и на неувеличенной - равновесие по тактам далеко от равновесия по выборкам. Учтите - LPC11xx по ценам такой же, как младшие модели АВР, например М48.
Последний раз редактировалось kison; 08.11.2010 в 09:15.
|
|
|
|
08.11.2010, 09:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от =GM=
|
А у меня ддс работает на 8 тактах.
|
8 кстати интересно. Выше было 10 тактов. При небольшой модификации выйдет 9. Как получить 8?
|
|
|
|
08.11.2010, 11:08
|
|
Прописка
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
согласен сам когда-то делал, было вроде 9 тактов
сложение 32 бита 4 такта
косвенное чтение 2 такта
вывод в порт 1 такт
безусловный переход 2 такта
итого 9...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:01.
|
|