Page 6 of 15

Re: IAR вопросик

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

Это не буква, а арифметический тип. А что сначала был просто чар с непонятным знаком, а потом для определённости приделали сигнед или унсигнед (сам чар так и остался какой попало), так это так получилось.

Re: IAR вопросик

PostPosted: 27 Sep 2012, 11:15
by lvd
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 бит и будут одним и тем же.

inline в ИАРе под з80

PostPosted: 02 Oct 2012, 08:32
by DimkaM
С чарами вроде устаканилось обсуждение, делаю новый вброс.

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

Re: IAR вопросик

PostPosted: 02 Oct 2012, 09:38
by fk0
"Любительское программирование".

Выводы не слишком адекватные. Почему char плохо тебе рассказали (неизвестная знаковость, ограниченный диапазон, используй int вместо, всё равно при вычислениях до int расширяется). Вместо int8_t нужно int_fast8_t. Об этом повсеместно (читай статейки на eetimes) рассказывается ибо при переходе 8bit -> ARM чувствуется весьма. И зачем вообще стремиться так к 8 битам непонятно. Ну т.е. понятно -- сознание 8-битное. Это уже практически не лечится...

Re: IAR вопросик

PostPosted: 02 Oct 2012, 09:39
by fk0
Общий изначальный вывод я выше писал -- используй int, тип предназначенный для чисел, и не еби мозг сввоими 8-ю битами.

Re: IAR вопросик

PostPosted: 02 Oct 2012, 10:44
by DimkaM
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)...
потомучта один или два байта из памяти доставать

Re: IAR вопросик

PostPosted: 02 Oct 2012, 15:02
by lvd
fk0 wrote:И зачем вообще стремиться так к 8 битам непонятно. Ну т.е. понятно -- сознание 8-битное. Это уже практически не лечится...

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

Как может быть арифметический тип быть не предназначенным для чисел?
И да, со своими указаниями чо юзать можешь пройти... в общем, куда подальше. Без тебя разберёмся.

Re: IAR вопросик

PostPosted: 02 Oct 2012, 17:52
by TS-Labs
fk0 wrote:Ну т.е. понятно -- сознание 8-битное

Отставить пиздеть, потому что лично мне, в стм32 очень даже нужно опрашивать 8-битную шину зетника (таки У НЕГО сознание 8 бит), и намного удобнее это делать через LDRB.

Re: IAR вопросик

PostPosted: 02 Oct 2012, 18:46
by TS-Labs
DimkaM wrote:Нинашол в пдфках "inline". Как объявить функцию чтоп она инлайн компилилась?

Квалифаер __INTRINSIC:
icclbutl.h
__INTRINSIC MEMORY_ATTRIBUTE int _formatted_read(const char **,
const char **,
va_list);

Re: IAR вопросик

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


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

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


Для чисел от -128 до +127... Это математическая абстракция нахуй не нужная в реальной жизни. В ней практически ничего посчитать нельзя.