<bgdev />free

Вход Регистрация

neon
0

0 1 2 3

#129246 (ツ) BIGBUGEX
Създадено на 11.12.2024 , видяно: 454 пъти.

Обаче тая стратегия е добра и за конвертиране към десетична стойност. Цената е едно деление което е трудно да се избегне. Дори на х64 умножението по 10 е възможно с последователност от 2 инструкции без умножение.

unsigned utos( char *s, unsigned val ) {
	uint64_t xval = ( val * 0x100000000ULL + 999999999 ) / 1000000000;
	unsigned i, j, x;
	
	for( j = i = 0; i < 10; i++ ) {
		s[j] = ( x = xval >> 32 ) + '0';
		
		if( x ) break;
		
		xval *= 10;
	}
	
	while( i++ < 9 ) {
		xval = (uint32_t)xval;
		xval *= 10;
		s[++j] = ( xval >> 32 ) + '0';
	}
	
	s[++j] = 0;
	
	return j;
}
#129662 (ツ) |
Създадено на 17.12.2024 , видяно: 348 пъти.
#129664 (ツ) Дон Реба
Създадено на 17.12.2024 , видяно: 340 пъти.
BIGBUGEX

Обаче тая стратегия е добра и за конвертиране към десетична стойност. Цената е едно деление което е трудно да се избегне.

универсалното делене си е бавно ако не ти е хардуерно. мене наскоро ми излезе като проблем и мисля да мина с таблица със степените на десятката

#129672 (ツ) BIGBUGEX
Последно редактирано на 18.12.2024 от BIGBUGEX, видяно: 314 пъти.
Дон Реба

универсалното делене си е бавно ако не ти е хардуерно. мене наскоро ми излезе като проблем и мисля да мина с таблица със степените на десятката

Едно делене или 128 битово умножение щото е голяма константа. Което е един път за конвертирането на цялата стойност към десетична бройна система. Пак е добре.

#129674 (ツ) Дон Реба
Създадено на 18.12.2024 , видяно: 308 пъти.

е добре е, на фона на обичайния код за микроконтролери който се вее из интернет. човек, ползват % за да циклят в буфер който е с размер степен на двойката, смятай. аз от друга страна нарочно не си линквам либгцц за да не се изкушавам да деля. в момента карам с printf който има само %x и %s , мисля все пак да добавя и %d

#129675 (ツ) BIGBUGEX
Последно редактирано на 18.12.2024 от BIGBUGEX, видяно: 300 пъти.

Може да разчитат компилатора да сведе % до & при оптимизацията. Най-вероятно и компилатора не пасе трева като го види това. И аз се изкушавам вместо >> да ползвам / със степен на 2 за по-добра прегледност. Въпреки че още не съм го правил. Трябва да се види компилатора какво генерира.

ПС: Например разчитам че това умножение * 0х100000000ULL ще се сведе до чист << 32 или диретно зареждане в старшата двойна дума.

#129676 (ツ) Дон Реба
Последно редактирано на 18.12.2024 от Дон Реба, видяно: 295 пъти.

то компилатора вероятно го прави, но двете неща не са баш идентични, трябва да е именно & а не %. ако нещо осереш и завъртиш поинтера назад, ще получиш - 1%256 което е - 1, а не 255 и ще почнеш да пишеш и четеш извън буфера. отделно че компилатора трябва да добави още 3-4 инструкции за знака, та да превърне & в %

#129686 (ツ) |
Създадено на 18.12.2024 , видяно: 265 пъти.
Дон Реба

е добре е, на фона на обичайния код за микроконтролери който се вее из интернет. човек, ползват % за да циклят в буфер който е с размер степен на двойката, смятай. аз от друга страна нарочно не си линквам либгцц за да не се изкушавам да деля. в момента карам с printf който има само %x и %s , мисля все пак да добавя и %d

Щом си стигнал до printf, делението ти е най-малкия проблем за скорост. :)

#129687 (ツ) Дон Реба
Създадено на 18.12.2024 , видяно: 258 пъти.

не е до скорост, за микроконтролерите гледам всичко да ми е под 100% контрол. либгцц може и да линкна ако видя зор, ама за сега се справям и без него. да не забравяме че от ей такива дреболии е тръгнал рънтайма и е стигнал до днешните безумия и помощ, помощ winsxs ми напълни диска

#129691 (ツ) |
Създадено на 18.12.2024 , видяно: 248 пъти.
Дон Реба

не е до скорост, за микроконтролерите гледам всичко да ми е под 100% контрол. либгцц може и да линкна ако видя зор, ама за сега се справям и без него. да не забравяме че от ей такива дреболии е тръгнал рънтайма и е стигнал до днешните безумия и помощ, помощ winsxs ми напълни диска

Аз затова избягвам да използвам printf изобщо ако ме вълнува контрол. Не знам как е имплементирано в libgcc, но си спомням главоболията с libc като линкна всичките i18n идиотщини, които така или иначе никой не използва.

Едно време имаше една ulibc която беше по-читава, но не знам как е за микроконтролери, май беше за Линукс.

#129696 (ツ) |
Създадено на 18.12.2024 , видяно: 226 пъти.

Между другото, най-добрия вариант за printf би бил стринга да се парсва когато се компилира и да се заменя със съответните функции за печатане. Би работило идеално в 99.9% от случаите.

#129697 (ツ) Дон Реба
Създадено на 18.12.2024 , видяно: 219 пъти.

там е работата че не знаеш дали печата, в момента по-често праща по някой сериен порт

#129700 (ツ) |
Създадено на 18.12.2024 , видяно: 200 пъти.
Дон Реба

там е работата че не знаеш дали печата, в момента по-често праща по някой сериен порт

Е то е ясно че от микроконтролер най-често ще се праща по сериен порт.

Това не е важно. Идеята е


printf("ala %d bala %04x nica %s\n", x, y, s); 

да се направи на


printstr("ala "); printdec(x, 0, 0); printstr(" bala "); printhex(y, 4, 1); 
printstr(" nica "); printstr(s); printstr("\n");

Така няма да се налага да парсваш стрингс за форматиране на микроконтролера.

#129710 (ツ) Дон Реба
Създадено на 19.12.2024 , видяно: 174 пъти.

е то парсването е доста елементарно, цялата функция ми се събира в един екран, и е по-бързо от пращането на символ така че накрая пак седиш и чакаш линията на терминала. забележи че разни паскали и други езици преди С ползват точно тоя подход - няколко вида принтове и си ги нареждаш за да сглобиш нещо. принтф на С обаче не случайно е такова каквото е и ги измества, дори в С++ никой не ползва цин и цоут, всички ползват принтф

#129769 (ツ) |
Създадено на 19.12.2024 , видяно: 149 пъти.
Дон Реба

е то парсването е доста елементарно, цялата функция ми се събира в един екран, и е по-бързо от пращането на символ така че накрая пак седиш и чакаш линията на терминала. забележи че разни паскали и други езици преди С ползват точно тоя подход - няколко вида принтове и си ги нареждаш за да сглобиш нещо. принтф на С обаче не случайно е такова каквото е и ги измества, дори в С++ никой не ползва цин и цоут, всички ползват принтф

Елементарно е, но също е елементарно и да се направи по време на компилация. :) Защо да мъчиш микроконтролера с парсване всеки път? :)

Аз бих го направил като pass в llvm, не знам колко лесно е в gcc. Но ако помня правилно ти вече си писал парсър за C++, така че можеш да го интегрираш в него. :)

Иначе и аз съм фен на printf. Този вариант запазва удобството му с простотата на изпълнение на "по-оптимален" код на микроконтролера.

And now for something completely different: първия SOC board с armv9 (и SVE) на пазара. Не е ужасно евтина, но се ядва...

Orion O6

#129770 (ツ) waldorf
Създадено на 19.12.2024 , видяно: 139 пъти.
|

And now for something completely different: първия SOC board с armv9 (и SVE) на пазара. Не е ужасно евтина, но се ядва...

Orion O6

Цената не е чак толкова зле. Ама в този бюджет новия Джетсън като, че ли по си струва. Интересно ако се сравнят двете платформи коя за какво ще е по добра.

#129785 (ツ) |
Създадено на 20.12.2024 , видяно: 117 пъти.
waldorf

Цената не е чак толкова зле. Ама в този бюджет новия Джетсън като, че ли по си струва. Интересно ако се сравнят двете платформи коя за какво ще е по добра.

Ако ти трябва много памет , PCIe слот или най-новите ядра на Арм (които не са за сървърния сегмент), Orion 6 изглежда по-добрия вариант. Ако ти трябва ML, и особено CUDA, Orin.

Според мен обявяването на Orion 6 от Radxa точно в този момент вероятно не е случайно. Особено ако се има предвид, че реално не може да ги получиш преди началото на февруари. Ако си сложа шапката от алуминиево фолио дори бих казал, че добавянето на буквата "о" по средата на "Orin" не е случайно. :)

#129786 (ツ) waldorf
Създадено на 20.12.2024 , видяно: 113 пъти.
|

Ако ти трябва много памет , PCIe слот или най-новите ядра на Арм (които не са за сървърния сегмент), Orion 6 изглежда по-добрия вариант. Ако ти трябва ML, и особено CUDA, Orin.

Според мен обявяването на Orion 6 от Radxa точно в този момент вероятно не е случайно. Особено ако се има предвид, че реално не може да ги получиш преди началото на февруари. Ако си сложа шапката от алуминиево фолио дори бих казал, че добавянето на буквата "о" по средата на "Orin" не е случайно. :)

Май, май ... бързали са след обявяването на нови Орин - явно не са го очаквали толкова скоро и толкова евтин. Нищо де, нВидия си има нужда от малко конкуренция. Не, че Радха са кой знае каква конкуренция ама като, че ли са най добре от всички до момента в долния сегмент.

#129791 (ツ) Дон Реба
Създадено на 20.12.2024 , видяно: 102 пъти.
|

Елементарно е, но също е елементарно и да се направи по време на компилация. :) Защо да мъчиш микроконтролера с парсване всеки път? :)

заемаш програмна памет, чист принтф като код е 3 пъти по-къс от раздробен

#129807 (ツ) |
Създадено на 20.12.2024 , видяно: 86 пъти.
Дон Реба

заемаш програмна памет, чист принтф като код е 3 пъти по-къс от раздробен

Good point. На теория е възможно. На практика не знам дали е вярно, но е валиден аргумент.

0 1 2 3

neon
0

AsmBB v3.0 (check-in: 7544654b24928b93); SQLite v3.47.0 (check-in: 03a9703e27c44437);
©2016..2024 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE