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

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

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

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

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

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


 
Опции темы
Непрочитано 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.RU
 
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

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

Сообщение от kison Посмотреть сообщение
Это не так называется. Unrolling банально разворачивает циклы, тупо повторяя все действия. Будет все равно работа с указателями, а сэкономится только время на счетчик итераций и переход на начало. Ну может тактов 8 из 30 = 22. Сравните с 6.
Да любое уменьшение цикла и есть unrolling.
Gnider вне форума  
Непрочитано 03.11.2010, 16:55  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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, время: 05:39.


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