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

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

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

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

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

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


 
Опции темы

STM8(S/L), первые впечатления

Непрочитано 03.11.2010, 15:44  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
А вот под STM8 эта фигня не собирается. Какие то странные вещи пишет - переполнение сегментов. Вроде 1800 байт должно в 2Кб влезать, а не лезут. Компилятор глючит что ли? Попробуйте в IAR собрать. Ну соответственно асм вставку в вечном цикле замените на что нибудь типа разрешения прерываний.
UPD: Собрал и сам, пришлось изменить секцию ubsct. По умолчанию ее размер всего 256 байт максимум, а туда идут все переменные инициализируемые 0. В общем это аналог bss, для тех кто с GCC знаком.
Компилятор не глючит, память разбита на три секции нулевая страница, "выше нулевой" и стек.
нулевая страница от 0 до 255
выше от 256 до макс_озу-стек
стек от макс_озу-стек до макс_озу
поэтому достаточно было сказать компилятору
@near short array1[ARRAY_SIZE];
и всё получилось бы, дока же есть к нему, достаточно хорошо описанна.
ЗЫ вот только при таком раскладе (для двух кило байт озу стек 512 байт, если не ошибаюсь) у вас не войдут всё массивы.
Реклама:
zheleznjakov вне форума  
Непрочитано 03.11.2010, 15:49  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
Код:
#define ARRAY_SIZE	300

uint16_t array1[ARRAY_SIZE];
uint16_t array2[ARRAY_SIZE];
uint16_t array3[ARRAY_SIZE];


void SummArray(void)
{
uint16_t i = ARRAY_SIZE;
uint16_t *pDest = array3,*pSrc1 = array1, *pSrc2 = array2;

	while(i--) *pDest++ = *pSrc1++ + *pSrc2++;
}

int main(void)
{
SummArray();

while(1)
	{
	asm volatile ("nop");
	}

}
Самое смешное что если заменить цикл на соледовательность
Код:
array1[0] = array2[0] + array3[0];
...
array1[299] = array2[299] + array3[299];
получаем всего лишь 1800 тактов т.е. 6 тактов на одну операцию, с циклом у меня получается 30 тактов...
zheleznjakov вне форума  
Непрочитано 03.11.2010, 16:16  
Gnider
Почётный гражданин KAZUS.RUN
 
Регистрация: 30.06.2005
Сообщений: 3,392
Сказал спасибо: 5
Сказали Спасибо 429 раз(а) в 305 сообщении(ях)
Gnider на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от zheleznjakov Посмотреть сообщение
Самое смешное что если заменить цикл на соледовательность
Код:
array1[0] = array2[0] + array3[0];
...
array1[299] = array2[299] + array3[299];
получаем всего лишь 1800 тактов т.е. 6 тактов на одну операцию, с циклом у меня получается 30 тактов...
Это называется "Unrolling Cycles". Ее мы рассматривать не будет ибо можно просуммировать без всякого цикла.
Gnider вне форума  
Непрочитано 03.11.2010, 16:33  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от zheleznjakov Посмотреть сообщение
и всё получилось бы, дока же есть к нему, достаточно хорошо описанна.
Есть дока. #pragma ubsct @near и все собирается. Можно было и по умолчанию так сделать - неужели два байта флеши экономят?

Сообщение от zheleznjakov Посмотреть сообщение
ЗЫ вот только при таком раскладе (для двух кило байт озу стек 512 байт, если не ошибаюсь) у вас не войдут всё массивы.
Все вроде входит. С чего это стек 512 байт? Я детально пока не разбирался, но считал что у космика стек как в GCC - компилятором никак не контролируется. Растет стек вниз, так что если до данных не достанет, то и все в порядке.

Сообщение от zheleznjakov Посмотреть сообщение
получаем всего лишь 1800 тактов
Размер слишком большой выйдет. Беда в том, что указателя всего два, вот и тормоза. Было бы три... С другой стороны 5700 тактов это GCC под АВР, у IAR будет куда больше, как у STM8 или еще тормознее. А народ им пользуется и не переживает по поводу таких вот тормозов. Но третий указатель STM8 бы не помешал
kison вне форума  
Непрочитано 03.11.2010, 16:36  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от Gnider Посмотреть сообщение
Это называется "Unrolling Cycles".
Это не так называется. Unrolling банально разворачивает циклы, тупо повторяя все действия. Будет все равно работа с указателями, а сэкономится только время на счетчик итераций и переход на начало. Ну может тактов 8 из 30 = 22. Сравните с 6.
kison вне форума  
Непрочитано 03.11.2010, 16:46  
Gnider
Почётный гражданин KAZUS.RUN
 
Регистрация: 30.06.2005
Сообщений: 3,392
Сказал спасибо: 5
Сказали Спасибо 429 раз(а) в 305 сообщении(ях)
Gnider на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
Это не так называется. Unrolling банально разворачивает циклы, тупо повторяя все действия. Будет все равно работа с указателями, а сэкономится только время на счетчик итераций и переход на начало. Ну может тактов 8 из 30 = 22. Сравните с 6.
Да любое уменьшение цикла и есть unrolling.
Gnider вне форума  
Непрочитано 03.11.2010, 16:55  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от Gnider Посмотреть сообщение
Да любое уменьшение цикла и есть unrolling.
Спорить не буду. Когда напишете хоть одну программу - поймете.
kison вне форума  
Непрочитано 03.11.2010, 17:09  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
Есть дока. #pragma ubsct @near и все собирается. Можно было и по умолчанию так сделать - неужели два байта флеши экономят?


Все вроде входит. С чего это стек 512 байт? Я детально пока не разбирался, но считал что у космика стек как в GCC - компилятором никак не контролируется. Растет стек вниз, так что если до данных не достанет, то и все в порядке.


Размер слишком большой выйдет. Беда в том, что указателя всего два, вот и тормоза. Было бы три... С другой стороны 5700 тактов это GCC под АВР, у IAR будет куда больше, как у STM8 или еще тормознее. А народ им пользуется и не переживает по поводу таких вот тормозов. Но третий указатель STM8 бы не помешал
Я детально не вникал глунял просто распределение секций у линкера, при 2048 байт озу нулевая страница 255 байт, а bss (data) от 0x0100 до 0x05FE, вот и подумал что 512 под стек.
zheleznjakov вне форума  
Непрочитано 03.11.2010, 17:10  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

а прога "соберается" да же если ARRAY_SIZE 20000 тыщ поставить...
zheleznjakov вне форума  
Непрочитано 03.11.2010, 17:18  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию А вот ещё один простой примерчик - программный DDS

с 32-разрядным аккумулятором фазы. 10 тактов, 2000 Котсчётов/с на тактовой 20 МГц. Интересно, насколько STM8 здесь проиграет? Код такой

loop: add r10,r20 ;
adc r11,r21 ;
adc r12,r22 ;
adc r30,r23 ;
lpm r13,z ;
out portb,r13 ;
rjmp loop
=GM= вне форума  
 
Опции темы

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

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, время: 06:07.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.