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

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

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

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

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

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


Закрытая тема
Опции темы
Непрочитано 26.10.2010, 22:24   #51
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от alexgap Посмотреть сообщение
Если делаете покупку на 1000 грн. и более (даже не по одной позиции) - это опт и этих процентов нет.
Если Вы сотрудник Космодрома - сделайте одолжение, разместите это на Вашем сайте. И укажите процент. Иначе всё это - словеса и не более.
Откуда взялась цифра 1000 грн? Почему не 500 и не 1599? Процент 3 или 8? Или всё-таки 5? Кстати, счета ведь выписываются не на Космодром, а на некие карточки, кои являются собственностью менеджеров. Сколько захотят, столько сверху и напишут. А в Космодром отстегнут то, что указано на сайте. Грязноватая работа, чтобы не сказать иначе.
Реклама:
ut1wpr вне форума  
Непрочитано 26.10.2010, 22:51   #52
ttss
Заблокирован
 
Регистрация: 26.10.2010
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
ttss на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

От цены прайса Космодрома накидывается 10-15%, если в розницу, но девочки в контейнере иногда "балуются", шалуньи, иногда накидывают и больше, что шокирует. Нужно разговаривать, например, если вам надо 20-30 штук 74HC4051, то цена как за одну штуку, а если 50 и больше, то соответствует прайсу, вот и решайте.
ttss вне форума  
Сказали "Спасибо" ttss
kvp7206 (09.03.2013)
Непрочитано 26.10.2010, 23:34   #53
projects.org.ua
Заблокирован
 
Регистрация: 15.10.2010
Адрес: Kiev/Kharkov
Сообщений: 133
Сказал спасибо: 15
Сказали Спасибо 21 раз(а) в 21 сообщении(ях)
projects.org.ua на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от ut1wpr Посмотреть сообщение
Если Вы сотрудник Космодрома - сделайте одолжение, разместите это на Вашем сайте. И укажите процент. Иначе всё это - словеса и не более.
Откуда взялась цифра 1000 грн? Почему не 500 и не 1599? Процент 3 или 8? Или всё-таки 5? Кстати, счета ведь выписываются не на Космодром, а на некие карточки, кои являются собственностью менеджеров. Сколько захотят, столько сверху и напишут. А в Космодром отстегнут то, что указано на сайте. Грязноватая работа, чтобы не сказать иначе.
О да, это верно, но им проще не размещать, так проще лохов ловить и обценивать.
Ценообразование кошмардрома приводят всех в дикий кипиш, порой такое мутят с ценами что кашмар.
Харьковчане уже привыкли к их отмазкам, а кошмардромовские продавцы так и говорят - от цены на сайте накидывайте 10% это будет почти то зачто продадут. И опт. у них понятие тоже странное.
projects.org.ua вне форума  
Сказали "Спасибо" projects.org.ua
kvp7206 (09.03.2013)
Непрочитано 27.10.2010, 03:26   #54
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Народ, имейте совесть. Хватит о ценах на Атмел в ветке по STM. Я конечно попрошу модераторов потом почистить оффтоп, но лучше сразу не сорить где попало. Тут можно только цены на STM8 обсуждать.
В общем о библиотеке. Ее беда в том, что не учитывается источник данных. При работе с регистрами периферии это почти всегда константы. А библиотека работает с ними как с переменными. В результате тормоза - ведь оптимизатору негде развернуться. Если же библиотеку изменить - сделать функции инлайновыми принудительно, то тормоза уходят и объем программы уменьшается. Почему это не сделано изначально мне не понятно. Возьмем простой пример - задание приоритета вектору. Библиотека нам предлагает файлы stm8_itc.h и stm8_itc.c с имеющейся функцией ITC_SetSoftwarePriority. Я не буду приводить исходный текст функции, желающие могут посмотреть самостоятельно. Приведу только листинг результата.
Дано:
Код:
// задаем самый низкий приоритет прерываниям от порта B
ITC_SetSoftwarePriority(4,0);
Результат:
Код:
// main.ls
547  0016 5f            	clrw	x
 548  0017 a604          	ld	a,#4
 549  0019 95            	ld	xh,a
 550  001a cd0000        	call	_ITC_SetSoftwarePriority

// собственно функция в stm8s_itc.ls
645  0000               _ITC_SetSoftwarePriority:
 647  0000 89            	pushw	x
 648  0001 89            	pushw	x
 649       00000002      OFST:	set	2
 658                     ; 216     Mask = (u8)(~(u8)(0x03U ‹‹ (((u8)IrqNum % 4U) * 2U)));
 660  0002 9e            	ld	a,xh
 661  0003 a403          	and	a,#3
 662  0005 48            	sll	a
 663  0006 5f            	clrw	x
 664  0007 97            	ld	xl,a
 665  0008 a603          	ld	a,#3
 666  000a 5d            	tnzw	x
 667  000b 2704          	jreq	L43
 668  000d               L63:
 669  000d 48            	sll	a
 670  000e 5a            	decw	x
 671  000f 26fc          	jrne	L63
 672  0011               L43:
 673  0011 43            	cpl	a
 674  0012 6b01          	ld	(OFST-1,sp),a
 675                     ; 219     NewPriority = (u8)((u8)(PriorityValue) ‹‹ (((u8)IrqNum % 4U) * 2U));
 677  0014 7b03          	ld	a,(OFST+1,sp)
 678  0016 a403          	and	a,#3
 679  0018 48            	sll	a
 680  0019 5f            	clrw	x
 681  001a 97            	ld	xl,a
 682  001b 7b04          	ld	a,(OFST+2,sp)
 683  001d 5d            	tnzw	x
 684  001e 2704          	jreq	L04
 685  0020               L24:
 686  0020 48            	sll	a
 687  0021 5a            	decw	x
 688  0022 26fc          	jrne	L24
 689  0024               L04:
 690  0024 6b02          	ld	(OFST+0,sp),a
 691                     ; 221     switch (IrqNum)
 693  0026 7b03          	ld	a,(OFST+1,sp)
 695                     ; 305     default:
 695                     ; 306         break;
 696  0028 a119          	cp	a,#25
 697  002a 2503cc00b2    	jruge	L562
 698  002f 5f            	clrw	x
 699  0030 97            	ld	xl,a
 700  0031 58            	sllw	x
 701  0032 de0032        	ldw	x,(L64,x)
 702  0035 fc            	jp	(x)
 703  0036               L112:
 704                     ; 228         ITC-›ISPR1 &= Mask;
 706  0036 c67f70        	ld	a,32624
 707  0039 1401          	and	a,(OFST-1,sp)
 708  003b c77f70        	ld	32624,a
 709                     ; 229         ITC-›ISPR1 |= NewPriority;
 711  003e c67f70        	ld	a,32624
 712  0041 1a02          	or	a,(OFST+0,sp)
 713  0043 c77f70        	ld	32624,a
 714                     ; 230         break;
 716  0046 206a          	jra	L562
 717  0048               L312:
 718                     ; 236         ITC-›ISPR2 &= Mask;
 720  0048 c67f71        	ld	a,32625
 721  004b 1401          	and	a,(OFST-1,sp)
 722  004d c77f71        	ld	32625,a
 723                     ; 237         ITC-›ISPR2 |= NewPriority;
 725  0050 c67f71        	ld	a,32625
 726  0053 1a02          	or	a,(OFST+0,sp)
 727  0055 c77f71        	ld	32625,a
 728                     ; 238         break;
 730  0058 2058          	jra	L562
 731  005a               L512:
 732                     ; 250         ITC-›ISPR3 &= Mask;
 734  005a c67f72        	ld	a,32626
 735  005d 1401          	and	a,(OFST-1,sp)
 736  005f c77f72        	ld	32626,a
 737                     ; 251         ITC-›ISPR3 |= NewPriority;
 739  0062 c67f72        	ld	a,32626
 740  0065 1a02          	or	a,(OFST+0,sp)
 741  0067 c77f72        	ld	32626,a
 742                     ; 252         break;
 744  006a 2046          	jra	L562
 745  006c               L712:
  746                     ; 264         ITC-›ISPR4 &= Mask;
 748  006c c67f73        	ld	a,32627
 749  006f 1401          	and	a,(OFST-1,sp)
 750  0071 c77f73        	ld	32627,a
 751                     ; 265         ITC-›ISPR4 |= NewPriority;
 753  0074 c67f73        	ld	a,32627
 754  0077 1a02          	or	a,(OFST+0,sp)
 755  0079 c77f73        	ld	32627,a
 756                     ; 266         break;
 758  007c 2034          	jra	L562
 759  007e               L122:
 760                     ; 272         ITC-›ISPR5 &= Mask;
 762  007e c67f74        	ld	a,32628
 763  0081 1401          	and	a,(OFST-1,sp)
 764  0083 c77f74        	ld	32628,a
 765                     ; 273         ITC-›ISPR5 |= NewPriority;
 767  0086 c67f74        	ld	a,32628
 768  0089 1a02          	or	a,(OFST+0,sp)
 769  008b c77f74        	ld	32628,a
 770                     ; 274         break;
 772  008e 2022          	jra	L562
 773  0090               L322:
 774                     ; 296         ITC-›ISPR6 &= Mask;
 776  0090 c67f75        	ld	a,32629
 777  0093 1401          	and	a,(OFST-1,sp)
 778  0095 c77f75        	ld	32629,a
 779                     ; 297         ITC-›ISPR6 |= NewPriority;
 781  0098 c67f75        	ld	a,32629
 782  009b 1a02          	or	a,(OFST+0,sp)
 783  009d c77f75        	ld	32629,a
 784                     ; 298         break;
 786  00a0 2010          	jra	L562
 787  00a2               L522:
 788                     ; 301         ITC-›ISPR7 &= Mask;
 790  00a2 c67f76        	ld	a,32630
 791  00a5 1401          	and	a,(OFST-1,sp)
 792  00a7 c77f76        	ld	32630,a
 793                     ; 302         ITC-›ISPR7 |= NewPriority;
 795  00aa c67f76        	ld	a,32630
 796  00ad 1a02          	or	a,(OFST+0,sp)
 797  00af c77f76        	ld	32630,a
 798                     ; 303         break;
 800                     ; 305     default:
 800                     ; 306         break;
 802  00b2               L562:
 803                     ; 310 }
 806  00b2 5b04          	addw	sp,#4
 807  00b4 81            	ret
Нехило для функции изменяющей два бита в регистре.
Напишем свой аналог.
Код:
@inline void    ITC_SetPriority(uint8_t vector, uint8_t priority)
{

uint8_t * ptr;
uint8_t mask;

    ptr = (uint8_t*)pITC + (vector ›› 2);
    mask = (uint8_t)(3 ‹‹ ((vector & 0x03) ‹‹ 1));
    *ptr = (uint8_t)((*ptr) & (~mask) | (priority ‹‹ ((vector & 0x03) ‹‹ 1)));
}
// и ее вызов, точно такой же как выше
ITC_SetPriority(4,0);
Результат:
Код:
541  000e c67f71        	ld	a,32625
542  0011 a4fc          	and	a,#252
543  0013 c77f71        	ld	32625,a
Результат тот же, изменяются два бита, а вот реализация несколько другая. Я разницу вижу, а вы?
Вообще делиться своими соображениями дальше, или все хотят пару лет подождать?

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

Если в вышеприведенном примере заменить константное указание вектора на переменную, то наступает ахтунг
Код:
volatile uint8_t a;
ITC_SetPriority(a,0);

// листинг
534                     ; 55 ITC_SetPriority(a,0);
 537  000e b600          	ld	a,_a
 538  0010 6b04          	ld	(OFST-2,sp),a
 539                     ; 26     ptr = (uint8_t*)pITC + (vector ›› 2);
 541  0012 44            	srl	a
 542  0013 44            	srl	a
 543  0014 5f            	clrw	x
 544  0015 97            	ld	xl,a
 545  0016 1c7f70        	addw	x,#32624
 546  0019 1f05          	ldw	(OFST-1,sp),x
 547                     ; 27     mask = (uint8_t)(3 ‹‹ (vector & 0x03));
 549  001b 7b04          	ld	a,(OFST-2,sp)
 550  001d a403          	and	a,#3
 551  001f 5f            	clrw	x
 552  0020 97            	ld	xl,a
 553  0021 a603          	ld	a,#3
 554  0023 5d            	tnzw	x
 555  0024 2704          	jreq	L41
 556  0026               L61:
 557  0026 48            	sll	a
 558  0027 5a            	decw	x
 559  0028 26fc          	jrne	L61
 560  002a               L41:
 561  002a 6b03          	ld	(OFST-3,sp),a
 562                     ; 28     *ptr = (uint8_t)((*ptr) & (~mask) | (priority ‹‹ (vector & 0x03)));
 564  002c 7b04          	ld	a,(OFST-2,sp)
 565  002e a403          	and	a,#3
 566  0030 5f            	clrw	x
 567  0031 97            	ld	xl,a
 568  0032 4f            	clr	a
 569  0033 5d            	tnzw	x
 570  0034 2704          	jreq	L02
 571  0036               L22:
 572  0036 48            	sll	a
 573  0037 5a            	decw	x
 574  0038 26fc          	jrne	L22
 575  003a               L02:
 576  003a 6b01          	ld	(OFST-5,sp),a
 577  003c 7b03          	ld	a,(OFST-3,sp)
 578  003e 1e05          	ldw	x,(OFST-1,sp)
 579  0040 43            	cpl	a
 580  0041 f4            	and	a,(x)
 581  0042 1a01          	or	a,(OFST-5,sp)
 582  0044 f7            	ld	(x),a
 583                     ; 56 ITC_SetSoftwarePriority(4,0);
 586  0045 5f            	clrw	x
 587  0046 a604          	ld	a,#4
 588  0048 95            	ld	xh,a
Но такая работа с железом редкость. Хотя помнить о этом все же следует. Кстати все равно лучше, чем через switch/case.
Если всего лишь сделать стандартную библиотечную функцию инлайновой, ну и вектор ес-но константным, то результат будет намного лучше:
Код:
 847  004c a6fc          	ld	a,#252
 848  004e 6b05          	ld	(OFST-1,sp),a
 849                     ; 34     NewPriority = (u8)((u8)(PriorityValue) ‹‹ (((u8)IrqNum % 4U) * 2U));
 851  0050 0f06          	clr	(OFST+0,sp)
 852                     ; 36     switch (IrqNum)
 854                     ; 51         ITC-›ISPR2 &= Mask;
 856  0052 c67f71        	ld	a,32625
 857  0055 1405          	and	a,(OFST-1,sp)
 858  0057 c77f71        	ld	32625,a
 859                     ; 52         ITC-›ISPR2 |= NewPriority;
 861  005a c67f71        	ld	a,32625
 862  005d 1a06          	or	a,(OFST+0,sp)
 863  005f c77f71        	ld	32625,a
 864                     ; 53         break;

Последний раз редактировалось kison; 27.10.2010 в 03:48.
kison вне форума  
Непрочитано 27.10.2010, 05:17   #56
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

В ассемблерных мнемониках чувствуется дух 6502 и Z80. Это мне уже нравится.
__________________
.

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
alexgap вне форума  
Непрочитано 27.10.2010, 06:33   #57
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

О приоритетах прерываний. В отличии от тех же АВР в STM8 имеется реально приоритетная система прерываний. Впрочем псевдоприоритеты по номерам векторов, как у АВР, тоже имеются. В регистре состояния есть два флажка i0 и i1. Ими задается текущий приоритет. Система по сути работает всегда в режиме прерывания. Для каждого вектора задается свой приоритет. При возникновении запроса на прерывание контроллер проверяет заданный для соответствующего вектора приоритет и вызывает прерывание только если он выше текущего. При входе в прерывание этот заданный приоритет копируется во флажки i1 и i0 регистра состояния процессора - теперь прерывания возможны только для векторов, у которых приоритет выше. При выходе из прерывания восстанавливается регистр состояния и соответственно приоритет действовавший до входа в прерывание. Запрет прерывания - установка в регистре состояния сразу максимального приоритета. Разрешение - минимального. Там все правда несколько хитрее, вектору нельзя задать минимальный приоритет, так чтоб он не мог прервать основной цикл. Ну и приоритеты идут не по порядку. Максимальный - 0b11, минимальный не 0b00 как логично предположить, а 0b10. Именно последний устанавливается текущим при разрешении прерываний в основном цикле. В общем довольно гибкая система и весьма продуманная.
kison вне форума  
Непрочитано 27.10.2010, 06:50   #58
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Источники тактирования. Тоже вполне удачно сделаны, причем некоторые решения очень хорошие. Источником может быть внешний генератор, встроенный генератор с внешним резонатором, встроенный RC на 16МГц и внутренний же RC генератор на 128КГц. Используемый источник можно выбирать из программы, т.е. он не задается раз и навсегда. Более того - система может сама переключить источник на внутренний 16МГц с делителем на 8, если например кварц отвалится. Перейдя на внутренний генератор мы еще и прерывание получим, ну чтоб знать что имеются проблемы. Это полезная фича.
kison вне форума  
Непрочитано 27.10.2010, 06:53   #59
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от niXto Посмотреть сообщение
Ручками... Но прерываний не так много, чтобы из-за этого париться...
Угу, ручками. И выйдет как раз то, что я в 30 сообщении приводил. Но если считаете не так, приведите свой вариант. Исходные данные выше - М128, порт G0 устанавливаем единичку в прерывании. И подсчитаем такты.
kison вне форума  
Непрочитано 27.10.2010, 15:47   #60
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от kison Посмотреть сообщение
Угу, ручками. И выйдет как раз то, что я в 30 сообщении приводил. Но если считаете не так, приведите свой вариант. Исходные данные выше - М128, порт G0 устанавливаем единичку в прерывании. И подсчитаем такты.
Ну вот, держите. Вся подпрограмма выполняется 9 циклов, плюс 8 на вход-выход из прерывания, итого 17. Проект на тиньке, поэтому для чистоты эксперимента установил единичку в ячейку 65 - соответствует ПОРТГ у мега128.

И мне самому интересно стало - давайте напишем подпрограмму преобразования 4-байтного (32 бита) двоичного числа в двоично-десятичное. Эта подпрограмма будет многим полезна, и она дает максимальную нагрузку на ядро - тут и сдвиги, и арифметика, и косвенная адресация. В стек и пр. ничего не сохраняем - предполагаем что у нас ВСЕ регистры и ячейки ОЗУ свободны. Согласны?
Миниатюры:
Нажмите на изображение для увеличения
Название: 0.PNG
Просмотров: 190
Размер:	10.3 Кб
ID:	14072  
niXto вне форума  
Закрытая тема

Закладки


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

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


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