- 
	- mainline GCC тоже не будет поддерживать зоопарк когда у разных
чипов свое уникальное расширение системы команд. Будет (то есть
уже) фрагментирование на 100500 кривых-косых неподдерживаемых
форков. Это RISC-V и похоронит. - 3m(27.02.2025 16:06)
			- Посмотрел я, какие особенности у CH32V003 с точки зрения
компилятора. Я так понял, китайский GCC добавляет расширение xw
(несколько компактных инструкций), масштаб эффекта от которого
неясный и, скорее всего, скромный. Ну и
__attribute((interrupt("WCH-Interrupt-fast"))) тоже со скромным
эффектом, и там есть варианты обхода. Официальный GCC должен
нормально подойти. Короче, горевать рано. - SciFi(10.03.2025 09:05)
					- Про масштаб эффекта расширения XW на примере моего проекта на
CH59x:  il-2(691 знак., 11.03.2025 06:48)
							- Цифры - страшная сила, особенно в умелых руках. Если не 150к таблиц
в коде, то разница впечатляет мизерностью. - Andreas(11.03.2025 09:31)
									- Вообще-то да. Сейчас глянул навскидку map-файл. Из всего этого кода
около 10Кб - это мои исходники. Все остальное - библиотека BLE. Так
что правильнее наверное смотреть контраст на фоне 10кБ. 200 байт на
фоне 10Кб - это уже 2% :-) Не много, но и не так уж мало. - il-2(11.03.2025 09:50)
											- Сейчас часто критично не объем памяти, а быстродействие. Возможно
там быстродействие выросло больше, не смотря на скромное уменьшение
объема - AlexBi(11.03.2025 11:23)
													- Быстродействие - это расшивание узкого места. Там можно и асм, если
оч. надо. А если у вас какое-то другое быстродействие, то оно
неправильное. - SciFi(11.03.2025 11:25)
															- Быстродействие именно это, только оно может появляться без
привлечения АСМа. У вас не было такого что без включенной
оптимизации в компиляторе оно не работает, т.е. не успевает? АСМ -
крайняя мера, лучше обходиться без него. - AlexBi(11.03.2025 12:59)
																	- Было разок за годы, причем при изменении в другом месте переставало работать. Да еще и при переходе на другую версию компилера может перестать работать.Или начнет. Напрягся, переписал кусочек команд на 50 на асм и забыл про весь этот неустойчивый гимор. - Andreas(11.03.2025 13:06)
- Когда-то давно было, нужно было обработчик прерывания допилить. Ну,
допилил. Уж там точно вот эти XW инструкции никак не помогли бы. - SciFi(11.03.2025 13:05)
																			- Разве плохо, когда кто-то за тебя все сделал и добавил в компилер
поддержку? И прога даром и бесплатно стала чуть короче. - Andreas(11.03.2025 13:10)
																					- Подъехали дополнительные сведения. На сайте Renesas можно скачать тулчейн LLVM+clang для RISC-V. Там LLVM 19.1.7, он умеет -march=rv32ec_xwchc. Проверил - действительно умеет. И никаких китайских форков. - SciFi(15.03.2025 22:26)
- Я только за. Но здесь "поддержка" в китайском форке GCC, и там есть ряд оговорок. А так да. С другой стороны, это я зажрался, наверное. Для того же стм8 если бы был хоть какой-то форк GCC с более-менее вменяемой генерацией кода, оторвали бы с руками :-) - SciFi(11.03.2025 13:13)
 
 
- Разве плохо, когда кто-то за тебя все сделал и добавил в компилер
поддержку? И прога даром и бесплатно стала чуть короче. - Andreas(11.03.2025 13:10)
																					
 
 
- Быстродействие именно это, только оно может появляться без
привлечения АСМа. У вас не было такого что без включенной
оптимизации в компиляторе оно не работает, т.е. не успевает? АСМ -
крайняя мера, лучше обходиться без него. - AlexBi(11.03.2025 12:59)
																	
 
- Быстродействие - это расшивание узкого места. Там можно и асм, если
оч. надо. А если у вас какое-то другое быстродействие, то оно
неправильное. - SciFi(11.03.2025 11:25)
															
- Это зависит от того, мы покупаем или продаём :-) - SciFi(11.03.2025 09:56)
													- вот да , недавно переделывал под больший экран, прошивка чуть 50к
превысили и я начал нервничать и думать об оптимизации. А потом
вспомнил, что проц с 128к оказался дешевле и в итоге им закупились. - Andreas(11.03.2025 10:31)
															- Продался за копейку! А мог бы покрасноглазить денёк-другой :-) - SciFi(11.03.2025 10:34)
 
 
- вот да , недавно переделывал под больший экран, прошивка чуть 50к
превысили и я начал нервничать и думать об оптимизации. А потом
вспомнил, что проц с 128к оказался дешевле и в итоге им закупились. - Andreas(11.03.2025 10:31)
															
 
- Сейчас часто критично не объем памяти, а быстродействие. Возможно
там быстродействие выросло больше, не смотря на скромное уменьшение
объема - AlexBi(11.03.2025 11:23)
													
 
- Вообще-то да. Сейчас глянул навскидку map-файл. Из всего этого кода
около 10Кб - это мои исходники. Все остальное - библиотека BLE. Так
что правильнее наверное смотреть контраст на фоне 10кБ. 200 байт на
фоне 10Кб - это уже 2% :-) Не много, но и не так уж мало. - il-2(11.03.2025 09:50)
											
- А разговоров-то было! - SciFi(11.03.2025 08:05)
 
- Цифры - страшная сила, особенно в умелых руках. Если не 150к таблиц
в коде, то разница впечатляет мизерностью. - Andreas(11.03.2025 09:31)
									
- xw - расширение - неоднозначно, с одной стороны чтение и запись
портов 8 или 16 бит упаковывается команда, с другой стороны -
использование типов uint16_t и uint8_t приводит к дополнительным
командам в коде по наложению маски!  Zikon(339 знак., 10.03.2025 10:14)
							- Насколько мне известно, стандартный GCC не ругается, когда ему в
параметрах архитектуры добавляешь xw. Вроде бы, это расширение уже
включили в ванильную ветку. - Nikolay_Po(10.03.2025 18:39)
									- расширение xw - содержит 8 команд, 4 команды взяты у Huawei, а 4
команды, что со стеком добавили сами. Стандартное расширение Zcb
имеет 4 команды, что без стека, но OPкод совсем другой и более
обрезанные по части смещения. А gcc всё что можно, то и будет
поддерживать! - Zikon(10.03.2025 19:44)
											- А где почитать что за инструкции? - Andreas(10.03.2025 19:53)
													- В RM на ядро " XW: 16-bit compression instruction for
self-extending byte and half-word operations. Note: To further
improve code density, extend the XW subset by adding the following
compression directives c.lbu/c.lhu/c.sb/c.sh/c.lbusp/ c.lhusp/c.sbsp/c.shsp, use based on the MRS compiler or the toolchain it provides." - petrd(10.03.2025 20:04)
															- Как связаны LLVM с GCC? Nikolay_Po(179 знак., 11.03.2025 16:10, ссылка)
- Это я видел, но что это за инструкции? - Andreas(10.03.2025 20:06)
																	- Товарищи китайцы такие затейники (инфа из LLVM): SciFi(2 знак., 10.03.2025 20:40, ссылка, картинка)
- Вот тут petrd(145 знак., 10.03.2025 20:11, ссылка)
 
 
 
- В RM на ядро " XW: 16-bit compression instruction for
self-extending byte and half-word operations. Note: To further
improve code density, extend the XW subset by adding the following
compression directives c.lbu/c.lhu/c.sb/c.sh/c.lbusp/ c.lhusp/c.sbsp/c.shsp, use based on the MRS compiler or the toolchain it provides." - petrd(10.03.2025 20:04)
															
 
- А где почитать что за инструкции? - Andreas(10.03.2025 19:53)
													
 
- расширение xw - содержит 8 команд, 4 команды взяты у Huawei, а 4
команды, что со стеком добавили сами. Стандартное расширение Zcb
имеет 4 команды, что без стека, но OPкод совсем другой и более
обрезанные по части смещения. А gcc всё что можно, то и будет
поддерживать! - Zikon(10.03.2025 19:44)
											
- Нет там аппаратного стека, там есть аппаратный механизм сохранения
10 регистров в пользовательский стек, по времени это так же как и
программное сохранение. - petrd(10.03.2025 11:35)
									- Тогда непонятно ограничение 2 уровнями, если в общий стек пихают,
какая разница сколько уровней? - Andreas(10.03.2025 12:08)
											- Ограничили вложенность прерываний! Только у ch32v30x (QK_V4F) аппаратный стек 3 уровня и вложенность до 8, после 3-х пишет в память - Zikon(10.03.2025 15:20)
- Это про вытеснение. - petrd(10.03.2025 12:11)
													- А вот и не факт. Во 1-х в манулах на ядра QingKe явно описывается
HPE как аппаратный стек. Конечно, реализация может не
соответствовать описанию - китайцы большие затейники в этом плане.
Однако есть еще кое-какие интересные биты в регистрах CSR, которые
указывают на аппаратную реализацию HPE:  il-2(613 знак., 10.03.2025 14:41)
															- Факт. Речь шла про V003, а значит ядро V2. V3 и V4 не трогаю,
говорю только про V2.  petrd(703 знак., 10.03.2025 15:27)
																	- Ну вот, кое что проясняется.  il-2(471 знак., 10.03.2025 15:55)
																			- СH32V003. Все прерывания в моем коде имеют атрибут
__attribute__((interrupt("WCH-Interrupt-fast"))).  petrd(163 знак., 10.03.2025 16:32, картинка)
																					- А вот сработало первое прерывание и MPOP = 1. petrd(1 знак., 10.03.2025 16:43, картинка)
 
 
- СH32V003. Все прерывания в моем коде имеют атрибут
__attribute__((interrupt("WCH-Interrupt-fast"))).  petrd(163 знак., 10.03.2025 16:32, картинка)
																					
 
- Ну вот, кое что проясняется.  il-2(471 знак., 10.03.2025 15:55)
																			
- Аппаратный стек - это такой, который сохраняет все регистры за 1
такт. Если для сохранения нужно по 1 такту на регистр, то толку с
того "аппаратного стека"? - =AlexD=(10.03.2025 14:55)
																	- Вот из мануала на QK_V4 ( здесь 3 уровня - это для V4F , для
остальных V4 - будет 2) ( V3 - тоже аппаратный стек есть 2 -
уровня) ( V2 - нет аппаратного стека )  Zikon(1 знак., 10.03.2025 15:13, картинка)
																			- Картинка не отвечает на вопрос о латентности. - =AlexD=(10.03.2025 15:26)
 
 
- Вот из мануала на QK_V4 ( здесь 3 уровня - это для V4F , для
остальных V4 - будет 2) ( V3 - тоже аппаратный стек есть 2 -
уровня) ( V2 - нет аппаратного стека )  Zikon(1 знак., 10.03.2025 15:13, картинка)
																			
 
- Факт. Речь шла про V003, а значит ядро V2. V3 и V4 не трогаю,
говорю только про V2.  petrd(703 знак., 10.03.2025 15:27)
																	
 
- А вот и не факт. Во 1-х в манулах на ядра QingKe явно описывается
HPE как аппаратный стек. Конечно, реализация может не
соответствовать описанию - китайцы большие затейники в этом плане.
Однако есть еще кое-какие интересные биты в регистрах CSR, которые
указывают на аппаратную реализацию HPE:  il-2(613 знак., 10.03.2025 14:41)
															
 
- Hardware Prologue/Epilogue (HPE) - я неправильно Hardware - понял? - Zikon(10.03.2025 11:51)
- ну и как он за 1 такт сохранит 10 регистров в памяти ? Да и разница
по времени всё-таки есть! - Zikon(10.03.2025 11:46)
											- Немного ошибся в v003 - нет теневых регистров, в старших qkV4 - есть теневой аппаратный стек до 3-х уровней с сохранением 16-ти регистров, а в v003 действительно идет сохранение в стек и происходит быстро, потому что не надо декодировать комманды. Надо на x033 или v203 - проверить. - Zikon(10.03.2025 12:20)
- Никак он за 1 такт не сохранит. 2 такта на сохранение регистра * 10 +... Klen раньше уже исследовал petrd(1 знак., 10.03.2025 12:12, ссылка)
- У вас на клаве восклицательный знак залип :-) Вот кто-то не поленился и измерил при помощи осциллографа >>> SciFi(1 знак., 10.03.2025 11:50, ссылка)
 
 
- Тогда непонятно ограничение 2 уровнями, если в общий стек пихают,
какая разница сколько уровней? - Andreas(10.03.2025 12:08)
											
 
- Насколько мне известно, стандартный GCC не ругается, когда ему в
параметрах архитектуры добавляешь xw. Вроде бы, это расширение уже
включили в ванильную ветку. - Nikolay_Po(10.03.2025 18:39)
									
 
- Про масштаб эффекта расширения XW на примере моего проекта на
CH59x:  il-2(691 знак., 11.03.2025 06:48)
							
- GCC пилят все кому не лень под свои чипы. Я и писал, что под каждый чип свой компилятор. А iar всех никогда не покроет. - VladislavS.(27.02.2025 20:01)
 
- Посмотрел я, какие особенности у CH32V003 с точки зрения
компилятора. Я так понял, китайский GCC добавляет расширение xw
(несколько компактных инструкций), масштаб эффекта от которого
неясный и, скорее всего, скромный. Ну и
__attribute((interrupt("WCH-Interrupt-fast"))) тоже со скромным
эффектом, и там есть варианты обхода. Официальный GCC должен
нормально подойти. Короче, горевать рано. - SciFi(10.03.2025 09:05)
					
- Для AVR же поддержали )) В одном флаконе "IAR C/C++ Compiler for
AVR" и "IAR C/C++ Compiler for AVR_TINY" - позволяет писАть
программки даже для AT90S1200 (!), у которой ни ОЗУ ни стека нет. - vpv.vpv(27.02.2025 08:39)
			- "IAR C/C++ Compiler for AVR_TINY" - это когда такое в природе было?  AlexG(58 знак., 27.02.2025 15:09)
					- С какой версии началось - не помню, но встречается уже давно. Одно
семейство AVR - два IAR компилятора.  vpv.vpv(1 знак., 03.03.2025 09:06, картинка)
							- Не похоже чтобы iccavr_tiny мог что-то скомпилировать для тех Tiny,
которые без ОЗУ. Пару попробовал - говорит "this CPU model is not
supported by the compiler." - AlexG(03.03.2025 09:30)
									- Да, наверное, для Си какое-то ОЗУ для стека всё-таки нужно,
попробовал АТ90S1200 - финт не проходит. Тут я наврал. :)) А вот
АТ90S2313 уже компилит. - vpv.vpv(04.03.2025 11:05)
											- ЕМНИП, какой-то старый AVR GCC умел и под них. Но это очень
условный Цэ - LightElf(04.03.2025 15:06)
													- C GCC это можно было делать так:  AlexG(297 знак., 04.03.2025 16:42, ссылка, ссылка)
															- Я для ATTINY13A писал какую-то шнягу на GCC, 64 байта хватит всем!
;-) - LightElf(04.03.2025 17:07)
																	- Для Тини13/15 на Си писали в аврстудио5 с тем компилятором, что шёл в комплекте. Вроде бы на основе той же GCC сделано - symbions(05.03.2025 20:38)
- Я тоже писал для tiny13, в IAR, оно даже работало, но мне не
понравилось как. - AlexG(05.03.2025 12:38)
																			- Звучит как возврат воздушных шаров по гарантии - "Они меня не
радуют" ;-)) - vpv.vpv(06.03.2025 11:21)
																					- Не стабильно оно работало, а ни памяти, ни периферии чтобы сделать
что-то более адекватное в tiny13 не было. Хотя знаю, есть
разработчики, которые в таких условиях справляются. - AlexG(06.03.2025 14:41)
																							- "Нестабильная работа" зависит не от контроллера же :)). У нас они в серийных изделиях годами работают, в жару и холод. Нареканий никаких. - vpv.vpv(10.03.2025 07:11)
- Странно, делали для улицы на тини13, небольшая программа на иар
авр, работает и даже ни одного возврата нет по проблемам на
вторичной стороне после сетевого трансформатора.. - Andreas(06.03.2025 14:46)
																									- Именно так. Тини13А - малюсенькая рабочая лошадка. )) - vpv.vpv(10.03.2025 07:13)
- микроконтроллер нормальный, просто маленький очень и тесный - AlexG(06.03.2025 16:23)
																											- И очень недорогой! - vpv.vpv(10.03.2025 07:08)
																													- PY32F002AL15S6TU - (sop8) - platan.ru - 18руб (от 1шт) Zikon(369 знак., 10.03.2025 09:42)
- был. в ближайшем магазине: ATTINY13A-SSU - 155р., APM32F030C8T6 - 107р. - AlexG(10.03.2025 08:55)
 
 
- И очень недорогой! - vpv.vpv(10.03.2025 07:08)
																													
 
 
 
- Не стабильно оно работало, а ни памяти, ни периферии чтобы сделать
что-то более адекватное в tiny13 не было. Хотя знаю, есть
разработчики, которые в таких условиях справляются. - AlexG(06.03.2025 14:41)
																							
 
- Звучит как возврат воздушных шаров по гарантии - "Они меня не
радуют" ;-)) - vpv.vpv(06.03.2025 11:21)
																					
- IAR AVR прекрасно для ATTiny13A компилит. Особенно с оптимизацией по размеру кода. У нас несколько серийных устройств выпускается на Тини13. - vpv.vpv(05.03.2025 11:40)
- А еще тинька13 присутствует в некрочиповском XC8 2.0 и в CodeVision. Глянул - именно второй пользовал в парочке своих приблудок на Attiny13. - Гyдвин(04.03.2025 17:38)
 
 
- Я для ATTINY13A писал какую-то шнягу на GCC, 64 байта хватит всем!
;-) - LightElf(04.03.2025 17:07)
																	
 
- C GCC это можно было делать так:  AlexG(297 знак., 04.03.2025 16:42, ссылка, ссылка)
															
 
- ЕМНИП, какой-то старый AVR GCC умел и под них. Но это очень
условный Цэ - LightElf(04.03.2025 15:06)
													
 
- Да, наверное, для Си какое-то ОЗУ для стека всё-таки нужно,
попробовал АТ90S1200 - финт не проходит. Тут я наврал. :)) А вот
АТ90S2313 уже компилит. - vpv.vpv(04.03.2025 11:05)
											
 
- Не похоже чтобы iccavr_tiny мог что-то скомпилировать для тех Tiny,
которые без ОЗУ. Пару попробовал - говорит "this CPU model is not
supported by the compiler." - AlexG(03.03.2025 09:30)
									
 
- С какой версии началось - не помню, но встречается уже давно. Одно
семейство AVR - два IAR компилятора.  vpv.vpv(1 знак., 03.03.2025 09:06, картинка)
							
- Сравнили тоже мне. Зоопарк RISC-V несравнимо больше и ситуация
будет только усугубляться. - VladislavS.(27.02.2025 10:26)
					- До зоопарка 8051 им исчо далеко, а с 51-ми как-то справились. - LightElf(27.02.2025 12:28)
							- Не скажите. У 51-х периферия разная. А у RISC-V и расширения набора
команд, и обработка прерываний совершенно разная. - VladislavS.(27.02.2025 13:42)
									- У 51-х тоже много всякого разного, иногда - неожиданного ;-) Одно количество DPTR чего стоит. - LightElf(27.02.2025 15:23)
 
 
- Не скажите. У 51-х периферия разная. А у RISC-V и расширения набора
команд, и обработка прерываний совершенно разная. - VladislavS.(27.02.2025 13:42)
									
 
- До зоопарка 8051 им исчо далеко, а с 51-ми как-то справились. - LightElf(27.02.2025 12:28)
							
 
- "IAR C/C++ Compiler for AVR_TINY" - это когда такое в природе было?  AlexG(58 знак., 27.02.2025 15:09)
					
 
- mainline GCC тоже не будет поддерживать зоопарк когда у разных
чипов свое уникальное расширение системы команд. Будет (то есть
уже) фрагментирование на 100500 кривых-косых неподдерживаемых
форков. Это RISC-V и похоронит. - 3m(27.02.2025 16:06)