IAR вопросик

Programs, sources, embedded, demomaking, whatsoever related to subj :)

Postby lvd » 26 Sep 2012, 09:01

KOE wrote:Тогда объясните наличие signed/unsigned char. Если это буква, то зачем ей знак?

Это не буква, а арифметический тип. А что сначала был просто чар с непонятным знаком, а потом для определённости приделали сигнед или унсигнед (сам чар так и остался какой попало), так это так получилось.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby lvd » 27 Sep 2012, 11:15

lvd wrote:покажи

Поскоко ответа явно не будет, поясню.

чар - арифметический тип (написано в стандарте).
чар -- наименьшая адресуемая процессором сущность (написано в стандарте), т.е. не может быть так, что чар -- 16 бит, но есть 8битные байты int8_t.
чар должен быть минимум 8 бит (написано в стандарте).
чар может быть больше, чем 8 бит.
int8_t (так как _t) -- typedef на что-нибудь (написано в стандарте), очевидно на чар (ЕСЛИ чар 8 бит). Если чар не 8 бит -- int8_t НЕТУ (ибо опциональный -- написано в стандарте).
Обязательные (написано в стандарте) - int_least8_t и int_fast8_t, но если чар НЕ 8 БИТ, то и int_least8_t будет не 8 бит, а больше (и скорее всего тот же чар и будет).

Далее выводы:

1. если имеется попаболь по поводу мега-ниибацо-кросплатформенности, то int8_t не следует юзать, ибо он есть только в случае, если чар 8 бит. Если же попаболи такой нету, то можно смело юзать что int8_t (не скомпилируется, если нету 8битных байтов), что чар (будет работать неверно).

2. если учитывать, что может не быть 8-битных типов, то чар равносилен int_least8_t -- и тот, и тот будут больше 8 бит и будут одним и тем же.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby DimkaM » 02 Oct 2012, 08:32

С чарами вроде устаканилось обсуждение, делаю новый вброс.

Нинашол в пдфках "inline". Как объявить функцию чтоп она инлайн компилилась?
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby fk0 » 02 Oct 2012, 09:38

"Любительское программирование".

Выводы не слишком адекватные. Почему char плохо тебе рассказали (неизвестная знаковость, ограниченный диапазон, используй int вместо, всё равно при вычислениях до int расширяется). Вместо int8_t нужно int_fast8_t. Об этом повсеместно (читай статейки на eetimes) рассказывается ибо при переходе 8bit -> ARM чувствуется весьма. И зачем вообще стремиться так к 8 битам непонятно. Ну т.е. понятно -- сознание 8-битное. Это уже практически не лечится...
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 02 Oct 2012, 09:39

Общий изначальный вывод я выше писал -- используй int, тип предназначенный для чисел, и не еби мозг сввоими 8-ю битами.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby DimkaM » 02 Oct 2012, 10:44

fk0 wrote:используй int вместо, всё равно при вычислениях до int расширяется

в условиях з80 ничё не расширяется, экономия по коду есть.
простейший пример: int test(void) и unsigned char test(void)

если сделать if(test())...
то в первом случае будет:
call test
ld a,l
or h
jr z,...
...

во втором случае
call test
or a
jr z,...
...

с арифметикой, особенно с вычитанием, будет тоже самое.
а если
int test;
...
if(test)...

то экономия ещё больше(в случае если у компилятора нет свободных регов чтоп хранить test), по сравнению с
unsigned char test;
...
if(test)...
потомучта один или два байта из памяти доставать
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby lvd » 02 Oct 2012, 15:02

fk0 wrote:И зачем вообще стремиться так к 8 битам непонятно. Ну т.е. понятно -- сознание 8-битное. Это уже практически не лечится...

Понятно, батхёрт.
fk0 wrote:Общий изначальный вывод я выше писал -- используй int, тип предназначенный для чисел, и не еби мозг сввоими 8-ю битами.

Как может быть арифметический тип быть не предназначенным для чисел?
И да, со своими указаниями чо юзать можешь пройти... в общем, куда подальше. Без тебя разберёмся.
F̞͖̭̿̔ͯu̐̅cͬ̑ͩk̨̤̳͇̮̭̪̠̽̿̓̆ͭͩ ̷̩̰͎̩͓̘̾̀ͬ̊ͭ͛ͅda̝̺͙̬͎̝̾͟ ̰̜̝̯͉̯̖̓̎́ͨ̽ͫ͟f̟͇̭̀ͬͨͭ̐̚u̹̼̹̗̞͑̔͂͐̚cͭ̅̊̆̒̆ǩ̝̩̯́ͥ̔̍̑ḭ͓͍̳̬ͦ̽͂n͍͎͈̈̅ͩͬ ̊ͫ̂̾̑̈́f̲͚͉͓͗̋́ͧͦ̅ȗ͇̲̻͈̲̅̎͗͒ͭ͡c̬̟̠̹̯̈́ͩ͘ͅk̫̠̻̋͜a̲͒̾̇!͙͕̺͉̗̩̲̂̏̄̀
User avatar
lvd
 
Posts: 7262
Joined: 07 Apr 2007, 21:28
Group: Registered users

Postby TS-Labs » 02 Oct 2012, 17:52

fk0 wrote:Ну т.е. понятно -- сознание 8-битное

Отставить пиздеть, потому что лично мне, в стм32 очень даже нужно опрашивать 8-битную шину зетника (таки У НЕГО сознание 8 бит), и намного удобнее это делать через LDRB.
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby TS-Labs » 02 Oct 2012, 18:46

DimkaM wrote:Нинашол в пдфках "inline". Как объявить функцию чтоп она инлайн компилилась?

Квалифаер __INTRINSIC:
icclbutl.h
__INTRINSIC MEMORY_ATTRIBUTE int _formatted_read(const char **,
const char **,
va_list);
TS-Labs
 
Posts: 1150
Joined: 19 Apr 2010, 10:10
Location: Wildest West
Group: Registered users

Postby fk0 » 02 Oct 2012, 22:57

DimkaM wrote:в условиях з80 ничё не расширяется, экономия по коду есть.
простейший пример: int test(void) и unsigned char test(void)


Это оптимизация...

lvd wrote:Как может быть арифметический тип быть не предназначенным для чисел?


Для чисел от -128 до +127... Это математическая абстракция нахуй не нужная в реальной жизни. В ней практически ничего посчитать нельзя.
Last edited by fk0 on 02 Oct 2012, 22:59, edited 1 time in total.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

PreviousNext

Return to Coding

Who is online

Users browsing this forum: No registered users and 14 guests

cron