Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не нашел .h файл в IAR с описанием uint8_t
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
_Алекс
Похоже, в IAR нет что то типа inttypes.h, может есть у кого заголовочный файл с описанием типов uint8_t, uint16_t и т.д. для IAR как в AVRGCC например.
Сергей Борщ
Цитата(_Алекс @ Oct 3 2007, 22:55) *
Похоже, в IAR нет что то типа inttypes.h
Нету. В IAR есть стандартный stdint.h Если речь идет о компиляторе для AVR, то надо включить библиотеку DLIB.
rezident
Можно и самому создать хидер с типами, в чем проблема?
prottoss
Цитата(_Алекс @ Oct 4 2007, 03:55) *
Похоже, в IAR нет что то типа inttypes.h, может есть у кого заголовочный файл с описанием типов uint8_t, uint16_t и т.д. для IAR как в AVRGCC например.


Код
#define uint8_t unsigned char

#define uint16_t unsigned int
и т.д
haker_fox
Цитата(prottoss @ Oct 4 2007, 10:20) *
Код
#define uint8_t unsigned char

#define uint16_t unsigned int
и т.д

Наверно правильнее все таки так:
typedef unsigned char uint8_t;
typedef unsinged short int uint16_t;
и т.д.
Таким образом мы вводим новые типы, которые поддаются контролю компилятора.
_Алекс
Мне кажется лучше пользоваться готовыми встроенными средствами компилятора, если подходят, если нет, писать самому. Использую IAR компилятор для AVR. Похоже надо писать самому.
Сергей Борщ
Цитата(_Алекс @ Oct 4 2007, 07:14) *
Использую IAR компилятор для AVR. Похоже надо писать самому.
Я же вам ответил - эти типы описаны в файле stdint.h. Этот файл в IAR есть. И такое название он имеет в соответствии со стандартом ISO/IEC 9899:1999. Если у вас компилятор для AVR, то этот файл лежит в папке inc/dlib
prottoss
Цитата(haker_fox @ Oct 4 2007, 11:00) *
Наверно правильнее все таки так:
typedef unsigned char uint8_t;
typedef unsinged short int uint16_t;
и т.д.
Таким образом мы вводим новые типы, которые поддаются контролю компилятора.
А зачем мне вводить новый тип, если меня вполне устраивает старый, кроме того, что он длинно пишется :-) - unsinged short int - и я переживаю за свою мультимедийную клавиатуру
Сергей Борщ
Цитата(prottoss @ Oct 4 2007, 13:29) *
А зачем мне вводить новый тип, если меня вполне устраивает старый, кроме того, что он длинно пишется :-)
Видимо для того, чтобы переменная имела 16 бит и на ARM и на AVR.
prottoss
Цитата(Сергей Борщ @ Oct 4 2007, 18:37) *
Видимо для того, чтобы переменная имела 16 бит и на ARM и на AVR.
Вы считаете что тип unsinged short int будет иметь разное количество бит для AVR и ARM?
Код
#define UINT16 unsinged short int
...
UINT16 var;

Переменная var для двух вышеназванных платформ будет разной длины?
rezident
Цитата(prottoss @ Oct 4 2007, 16:43) *
Вы считаете что тип unsinged short int будет иметь разное количество бит для AVR и

В стандарте Си нет жестко заданной разрядности типов данных. Есть только ограничения типа char>=short>=int>=long. Ограничения на разрядность данных описаны в хидере limits.h в виде INT_MIN, INT_MAX, LONG_MIN, LONG_MAX и т.п. Так что для разных CPU/MCU разрядность схожих типов данных может быть тоже различной.
prottoss
Цитата(rezident @ Oct 4 2007, 18:53) *
В стандарте Си нет жестко заданной разрядности типов данных. Есть только ограничения типа char>=short>=int>=long. Ограничения на разрядность данных описаны в хидере limits.h в виде INT_MIN, INT_MAX, LONG_MIN, LONG_MAX и т.п. Так что для разных CPU/MCU разрядность схожих типов данных может быть тоже различной.
Тогда назовите хотя бы одну платформу или хотя бы один современный компилятор, в которой

char не равно 8 бит

short int не равно 16 бит

long int не равно 32 бит

long long int не равно 64 бит



"просто" int я в учет не беру, потому что тип этот на самом деле с "плавающей" разрядностью от платформы к платформе
alexander55
Стандарт ANSI/ISO C Standart
char 8
unsigned char 8
signed char 8
int 16 or32
unsigned int 16 or 32
signed int 16 or 32
short int 16
unsigned short int 16
signed short int 16

long int 32
signed long int 32
unsigned long int 32
float 32
double 64
long double 80

Цитата(prottoss @ Oct 4 2007, 15:05) *
Тогда назовите хотя бы одну платформу или хотя бы один современный компилятор, в которой

char не равно 8 бит

short int не равно 16 бит

long int не равно 32 бит

long long int не равно 64 бит



"просто" int я в учет не беру, потому что тип этот на самом деле с "плавающей" разрядностью от платформы к платформе

Не спорьте, не заводитесь.
prottoss
Цитата(alexander55 @ Oct 4 2007, 19:17) *
Не спорьте, не заводитесь.
Хех...я и не завожусь:-) Просто Вы привели то же самое, что сказал я постом выше - для основных типов разрядность во всех платформах и компиляторах ОДИНАКОВАЯ. А еще постом выше rezident сказал, что эти типы для разных платформ будут разные.
rezident
Цитата(prottoss @ Oct 4 2007, 17:05) *
Тогда назовите хотя бы одну платформу или хотя бы один современный компилятор, в которой

char не равно 8 бит

short int не равно 16 бит

long int не равно 32 бит

long long int не равно 64 бит

В Recommended C Style and Coding Standards см. на странице 17(18).
zltigo
Цитата(prottoss @ Oct 4 2007, 13:29) *
он длинно пишется :-) - unsinged short int - и я переживаю за свою мультимедийную клавиатуру

Тогда int в этом явно лишнее - просто unsinged short хотя лично я предпочитаю "новый" тип ushort. Типы вроде uint16_t достаточно непривычны по сравнению с классическими, но типы вроде uint_least16_t, uint_fast16_t следует признать очень полезными.
dxp
Цитата(rezident @ Oct 4 2007, 17:53) *
char>=short>=int>=long

Чуть-чуть наоборот. smile.gif
prottoss
Цитата(rezident @ Oct 4 2007, 19:23) *
В Recommended C Style and Coding Standards см. на странице 17(18).
Это совсем не аргумент;-) Я посмеялся, когда прочитал и посмотрел таблицу. А почему в ней нет Марк2? В таблице динозавры. Документ датирован 1995 годом. Я же имел ввиду современные платформы. Так вы мне ответите?



Вот таблица
dxp
Цитата(prottoss @ Oct 4 2007, 18:05) *
Тогда назовите хотя бы одну платформу или хотя бы один современный компилятор, в которой

char не равно 8 бит

TMS320F28xx. 16 бит.

Дело не том, старые или новые платформы. Вот TMS вполне новый. Дело в принципе. Завтра может появиться еще платформа, у которой типы будут иметь "непривычную" разрядность. Стандарт регламентирует правила, все обязаны их соблюдать, для того правила и придуманы. Если кто-то их не соблюдает, он сам себе злобный буратина.
rezident
Цитата(dxp @ Oct 4 2007, 17:33) *
Чуть-чуть наоборот. smile.gif

ну да, наоборот 01.gif
char<=short<=int<=long.

Цитата(prottoss @ Oct 4 2007, 17:35) *
Это совсем не аргумент;-) Я посмеялся, когда прочитал и посмотрел таблицу. А почему в ней нет Марк2? В таблице динозавры. Документ датирован 1995 годом. Я же имел ввиду современные платформы. Так вы мне ответите?

Отвечу. Читайте внимательно стандарт ANSI C.
prottoss
Цитата(dxp @ Oct 4 2007, 19:36) *
TMS320F28xx. 16 бит.
А что за компилятор?
rezident
Цитата(prottoss @ Oct 4 2007, 18:03) *
А что за компилятор?

Code Composer Studio вестимо. Вот хидер limits.h из его комплекта. Причем еще обращаю ваше внимание на аннотацию к User's Guide этого CCS.
Цитата.
Цитата
The TMS320C28x™ C/C++ compiler accepts C and C++ code conforming to the International Organization for Standardization (ISO) standards for these languages, and produces assembly language source code for the TMS320C28x device. The compiler supports the 1989 version of the C language.

This user’s guide discusses the characteristics of the C/C++ compiler. It assumes that you already know how to write C/C++ programs. The C Programming Language (second edition), by Brian W. Kernighan and Dennis M. Ritchie, describes C based on the ISO C standard. You can use the Kernighan and Ritchie (hereafter referred to as K&R) book as a supplement to this manual. References to K&R C (as opposed to ISO C) in this manual refer to the C language as defined in first edition of Kernighan and Ritchie’s The C Programming Language.

То бишь он в полном соответствии со стандартом разработан wink.gif
prottoss
Хорошо, признаю, был не прав 05.gif



Но мне так и не понятно, отчего

Код
#define unsigned short int uint16_t
хуже
Код
typedef unsigned short int uint16_t
Объясните страждущему, плиз.
IgorKossak
Цитата(prottoss @ Oct 4 2007, 15:57) *
Но мне так и не понятно, отчего
Код
#define unsigned short int uint16_t
хуже
Код
typedef unsigned short int uint16_t
Объясните страждущему, плиз.

Да ничем не хуже. Компилятор в любом случае будет контролировать исходный тип.
Просто так не элегантно.
Дело в том, что некоторые IDE позволяют делать браузинг обьектов, типов, макросов и т. д. и uintХХ_t будет отнесён ими не к типам, как по логике, а к макросам.
Только и всего, на мой взгляд.
prottoss
Цитата(IgorKossak @ Oct 4 2007, 21:02) *
Да ничем не хуже.
Я тоже так подумал в начале спора, но мне почему то дали по шее smile.gif
dxp
Цитата(prottoss @ Oct 4 2007, 19:57) *
Но мне так и не понятно, отчего

Код
#define unsigned short int uint16_t
хуже
Код
typedef unsigned short int uint16_t
Объясните страждущему, плиз.

В данном случае, видимо, большой разницы нет. Но вот попробуйте с помощью дефайна определить тип указателя на функцию? Про другие недостатки уже сказали. Лучше пользоваться теми средствами, которые явно предназначены. А использование макросов препроцессора свести к минимуму.
zltigo
Цитата(prottoss @ Oct 4 2007, 16:09) *
Я тоже так подумал в начале спора, но мне почему то дали по шее smile.gif

Правильно дали smile.gif
Для начала не:
Цитата
#define unsigned short int uint16_t

а
Код
#define uint16_t unsigned short int

А по существу #define и typedef по разному обрабатываются - один препроцессором, а второй компилятором. Компилятор (или дополнительные утилиты типа lint) могут дополнительно заниматься котролем типов, а препроцессор - нет. Кроме того попробуйте ответить на вопрос есть-ли разница между, например, типами переменных bb и dd:
str_t aa, bb;
str_d cc, dd;
если:
typedef char *str_t; // Правильный подход к делу
#define str_d char * // Дурной стиль без всякой на то надобности да и еще с побочными эффектами
prottoss
Цитата(dxp @ Oct 4 2007, 21:20) *
В данном случае, видимо, большой разницы нет. Но вот попробуйте с помощью дефайна определить тип указателя на функцию? Про другие недостатки уже сказали. Лучше пользоваться теми средствами, которые явно предназначены. А использование макросов препроцессора свести к минимуму.
Я же не говорил, что #define - панацея от всех бед. Я просто показал, как можно сделать, то что просил создатель ветки... А мне начали втыкивать про разрядность типов 07.gif

Цитата(zltigo @ Oct 4 2007, 21:30) *
Кроме того попробуйте ответить на вопрос есть-ли разница между, например, типами переменных bb и dd:
str_t aa, bb;
str_d cc, dd;
если:
typedef char *str_t; // Правильный подход к делу
#define str_d char * // Дурной стиль без всякой на то надобности да и еще с побочными эффектами
Наверное есть, они же в итоге разных типов - bb типа str_t, а dd типа char *
Сергей Борщ
Цитата(prottoss @ Oct 4 2007, 16:40) *
а dd типа char *
char. Сюрприз.
prottoss
Цитата(Сергей Борщ @ Oct 4 2007, 22:10) *
char. Сюрприз.
Но я не предлагал через #define объявлять указатели. Это ваши загадки, на которые вы сами знаете ответы.
_Алекс
Цитата(Сергей Борщ @ Oct 4 2007, 13:15) *
Я же вам ответил - эти типы описаны в файле stdint.h. Этот файл в IAR есть. И такое название он имеет в соответствии со стандартом ISO/IEC 9899:1999. Если у вас компилятор для AVR, то этот файл лежит в папке inc/dlib

Один момент, при конфигурации проекта указывая библиотеку CLIB, подразумевая, что проект будет написан на Си, заголовочного файла естественно нет, конечно, если указать Normal DLIB, там есть. Если смысл указывать Normal DLIB когда весь проект планируется писать на только Си.
rezident
Цитата(_Алекс @ Oct 4 2007, 23:34) *
Если смысл указывать Normal DLIB когда весь проект планируется писать на только Си.

А чем помешает указание Normal DLIB писательству "на только Си"? В крайнем случае можно требуемые хидеры из каталога DLIB скопировать в каталог своего проекта.
mdmitry
Если не изменяет память, то char на VAX 32 бита.
По поводу типов: не проще ли посмотреть соответствующий заголовочный файл в WinAvr, где все это описано (<inttypes.h>).
alexander55
Цитата(mdmitry @ Oct 4 2007, 23:26) *
Если не изменяет память, то char на VAX 32 бита.
По поводу типов: не проще ли посмотреть соответствующий заголовочный файл в WinAvr, где все это описано (<inttypes.h>).

Минимальная разрядность для разных типов дана в #13,
формула в посте #20,
разъяснения дал resident в начале.
Что тут еще обсуждать.
PS. char в 2015 году м.б. 128 бит на некоторых uC. Это не противлречит стандарту, а 4 бита никогда. 07.gif
IgorKossak
Цитата(_Алекс @ Oct 4 2007, 20:34) *
Один момент, при конфигурации проекта указывая библиотеку CLIB, подразумевая, что проект будет написан на Си, заголовочного файла естественно нет, конечно, если указать Normal DLIB, там есть. Если смысл указывать Normal DLIB когда весь проект планируется писать на только Си.

Ничто также не мешает писать программу на чистом С используя хедеры, библиотеки и компилятор С++.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.