Перейти к содержанию
    

29 минут назад, jcxz сказал:

Как и где определён этот самый uint_fast8_t?

stdint.h

29 минут назад, jcxz сказал:

Мой IAR_7.80.4 его не знает.

Мой 8.2 знает

 

ps откопал иар 7,2 - тоже знает

Изменено пользователем razrab83

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/12/2018 at 7:34 PM, jcxz said:

Как и где определён этот самый uint_fast8_t? Мой IAR_7.80.4 его не знает. И в uCOS-II его тоже нет.

Опеределен в стандарте С99:

7.18.1.3 Fastest minimum-width integer types
http://www.dii.uchile.cl/~daespino/files/Iso_C_1999_definition.pdf

Стыдно Вам должно быть за такие слова!)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, Integro сказал:

Стыдно Вам должно быть за такие слова!)

За какие слова? Я разве в чём-то соврал? Вставил в исходник, IAR сказал: "undefined". Прошёл поиском по всем версиям uCOS-II какие у меня есть (поскольку некоторые утверждали что оно там есть) вплоть до v2.92.13 - нету.

Стыдно должно быть тем, кто утверждал, что оно используется в uCOS-II. Вот это откровенная неправда.  :wink:

А то что я его не использую... Так что с того? Не нужно значит. Я думаю, что Вы тоже многое не используете, что я знаю.  :smile:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 часа назад, razrab83 сказал:

 90       int_fast8_t foo(int_fast8_t x)
          foo:
08004cb4:   foo:
            MOVS      R1, R0
 92         if((x+127)>0) return 1; else return 0;
08004cb6:   ADDS.W    R0, R1, #127            ; 0x7f
08004cba:   CMP       R0, #1
08004cbc:   BLT.N     0x8004cc2
08004cbe:   MOVS      R0, #1
08004cc0:   B.N       0x8004cc4
08004cc2:   MOVS      R0, #0
08004cc4:   BX        LR

 


90       int foo(int x)
          foo:
08004cb4:   foo:
            MOVS      R1, R0
 92         if((x+127)>0) return 1; else return 0;
08004cb6:   ADDS.W    R0, R1, #127            ; 0x7f
08004cba:   CMP       R0, #1
08004cbc:   BLT.N     0x8004cc2
08004cbe:   MOVS      R0, #1
08004cc0:   B.N       0x8004cc4
08004cc2:   MOVS      R0, #0
08004cc4:   BX        LR

ARM, IAR, без оптимизации.

Я тоже считаю, что лучше применять типы данных соответствующие описываемым ими сущностям. Код должен быть понятный и наглядный (а часто ещё и легко переносимый). Что касательно избыточности - современные компиляторы хорошо умеют справляются с "чужой" разрядностью. всякие оптимизаторы, int_fastN_t, intN_t, int_leastN_t ...

Версия IAR-а, которым сиё скомпилено - какая? Вообще, это хороший тон - указывать номер версии компилятора, если приводите что-то касающееся его работы (листинги).

У IAR-а между прочим в некоторых версиях от 8.xx до 8.32 есть баг касающийся как раз компиляции такого кода, где есть операции сравнения неосновных типов (например u16). Уже разбирали его на этом форуме. Потом они его поправили (в 8.30 или 8.32). Так что если Вы привели от такой кривой версии - то грош цена этим листингам.  :cray:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, jcxz сказал:

Стыдно должно быть тем, кто утверждал, что оно используется в uCOS-II.

А кто утверждал что что-то используется в uCOS-II?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, jcxz сказал:

Версия IAR-а, которым сиё скомпилено - какая?

 

В 12.12.2018 в 22:01, razrab83 сказал:

Мой 8.2 знает

 

 

 

 

3 часа назад, jcxz сказал:

Так что если Вы привели от такой кривой версии - то грош цена этим листингам.

В 10.12.2018 в 12:04, jcxz сказал:

Может перестанем хамить и лучше чему-нить поучимся?

Может перестать искать оправдания и лучше чему-нить поучимся? Определение int_fast8_t без листингов говорит само за себя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, razrab83 сказал:

Может перестать искать оправдания и лучше чему-нить поучимся? Определение int_fast8_t без листингов говорит само за себя.

Открыл этот самый stdint.h: И о чём же таком сокровенном говорит это:

typedef __INT_FAST8_T_TYPE__   int_fast8_t;  ???

Просветите неуча. Научите как из этого определения почерпнуть тонкости его реализации? И __INT_FAST8_T_TYPE__ нигде нету....

Ваш 8.2x здесь никак не авторитет - читайте ветку про IAR про баги. Незачем тут кривые листинги в подтверждение чего-то выкладывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, jcxz сказал:

И __INT_FAST8_T_TYPE__ нигде нету....

Встроенный тип компилятора. Если потребовалось его появление - значит ни один из имевшихся типов под задачу не подходил полностью. Не заставляет задуматься? Ну хорошо: не нравится - не используйте, но вы уже две страницы доказываете, что раз вы его не используете, значит он не нужен вообще никому. В этом вы не правы. stdint.h появился в стандарте 19 лет назад, уже не девочка, уже можно пользоваться, ибо пользы от его использования больше, чем от неиспользования. Уже надо бить по рукам за всякие s16 и тому подобные велосипеды.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 минуту назад, jcxz сказал:

Незачем тут кривые листинги в подтверждение чего-то выкладывать.

В чем кривость данного листинга? 

21 минуту назад, jcxz сказал:

Ваш 8.2x здесь никак не авторитет

Напротив. Даже если в нем есть ошибки, то в следующей версии ошибки исправят, а stdint.h останется.

P.S. я до сих пор пользуюсь обычным кнопочным мобильным телефоном. Да, я называю его "телефоном здорового человека", но я не пытаюсь доказывать всем остальным, что их смартфоны - полный фуфел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, razrab83 сказал:

Определение int_fast8_t без листингов говорит само за себя.

Определение (описание)  в стандарте. Как минимум

   
Цитата

int_fast8_t    uint_fast8_t - Integer type with a minimum of 8, 16, 32, or 64 bits.
At least as fast as any other integer type with at least the specified width.

Как максимум в инете полно разжевынных объяснений - что это такое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, Сергей Борщ сказал:

Встроенный тип компилятора. Если потребовалось его появление - значит ни один из имевшихся типов под задачу не подходил полностью. Не заставляет задуматься? Ну хорошо: не нравится - не используйте, но вы уже две страницы доказываете, что раз вы его не используете, значит он не нужен вообще никому.

Я ничего не доказываю, вы что-то путаете - я вообще ничего не говорил про нужность или ненужность его. Наоборот - только в свой адрес и слышу "Раз ты его не используешь, то ты лох". :to_take_umbrage:

Тут привели его в качестве аргумента, я всего лишь спросил: "где его описание или что из себя представляет?" В ответ получил отсылки туда, где этого описания нет.

9 часов назад, Сергей Борщ сказал:

В чем кривость данного листинга?

В том, что данная версия IAR неправильно компилит код с uint16_t, а значит её листинг нельзя приводить в качестве объяснения работы с такими типами - он неверный:

https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=147939

 

PS: Да, вот теперь вижу разницу между типами (IAR_7.80.4):

Спойлер

#include <stdint.h>

                    In section .text, align 2, keep-with-next
int8_t foo1(int8_t x)
{
  if ((x += 127) > 0) x++;
        _Z4foo1a: (+1)
 0x307F             ADDS     R0,R0,#+127
 0xB240             SXTB     R0,R0
 0x2801             CMP      R0,#+1
 0xBFA8             IT       GE
 0x1C40             ADDGE    R0,R0,#+1
  return x;
 0xB240             SXTB     R0,R0
 0x4770             BX       LR               ;; return
}

                    In section .text, align 2, keep-with-next
int_fast8_t foo2(int_fast8_t x)
{
  if ((x += 127) > 0) x++;
        _Z4foo2i: (+1)
 0x307F             ADDS     R0,R0,#+127
 0x2801             CMP      R0,#+1
 0xBFA8             IT       GE
 0x1C40             ADDGE    R0,R0,#+1
  return x;
 0x4770             BX       LR               ;; return
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...