|
Не нашел .h файл в IAR с описанием uint8_t |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 34)
|
Oct 4 2007, 03:00
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(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; и т.д. Таким образом мы вводим новые типы, которые поддаются контролю компилятора.
--------------------
Выбор.
|
|
|
|
|
Oct 4 2007, 10:43
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Сергей Борщ @ Oct 4 2007, 18:37)  Видимо для того, чтобы переменная имела 16 бит и на ARM и на AVR. Вы считаете что тип unsinged short int будет иметь разное количество бит для AVR и ARM? Код #define UINT16 unsinged short int ... UINT16 var; Переменная var для двух вышеназванных платформ будет разной длины?
--------------------
|
|
|
|
|
Oct 4 2007, 11:05
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(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 я в учет не беру, потому что тип этот на самом деле с "плавающей" разрядностью от платформы к платформе
--------------------
|
|
|
|
|
Oct 4 2007, 11:17
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Стандарт 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 16long 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 я в учет не беру, потому что тип этот на самом деле с "плавающей" разрядностью от платформы к платформе Не спорьте, не заводитесь.
Сообщение отредактировал alexander55 - Oct 4 2007, 11:14
|
|
|
|
|
Oct 4 2007, 11:27
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(prottoss @ Oct 4 2007, 13:29)  он длинно пишется :-) - unsinged short int - и я переживаю за свою мультимедийную клавиатуру Тогда int в этом явно лишнее - просто unsinged short хотя лично я предпочитаю "новый" тип ushort. Типы вроде uint16_t достаточно непривычны по сравнению с классическими, но типы вроде uint_least16_t, uint_fast16_t следует признать очень полезными.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 4 2007, 11:51
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(dxp @ Oct 4 2007, 17:33)  Чуть-чуть наоборот.  ну да, наоборот char<=short<=int<=long. Цитата(prottoss @ Oct 4 2007, 17:35)  Это совсем не аргумент;-) Я посмеялся, когда прочитал и посмотрел таблицу. А почему в ней нет Марк2? В таблице динозавры. Документ датирован 1995 годом. Я же имел ввиду современные платформы. Так вы мне ответите? Отвечу. Читайте внимательно стандарт ANSI C.
|
|
|
|
|
Oct 4 2007, 12:45
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(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. То бишь он в полном соответствии со стандартом разработан
|
|
|
|
|
Oct 4 2007, 12:57
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Хорошо, признаю, был не прав Но мне так и не понятно, отчего Код #define unsigned short int uint16_t хуже Код typedef unsigned short int uint16_t Объясните страждущему, плиз.
--------------------
|
|
|
|
|
Oct 4 2007, 13:02
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(prottoss @ Oct 4 2007, 15:57)  Но мне так и не понятно, отчего Код #define unsigned short int uint16_t хуже Код typedef unsigned short int uint16_t Объясните страждущему, плиз. Да ничем не хуже. Компилятор в любом случае будет контролировать исходный тип. Просто так не элегантно. Дело в том, что некоторые IDE позволяют делать браузинг обьектов, типов, макросов и т. д. и uintХХ_t будет отнесён ими не к типам, как по логике, а к макросам. Только и всего, на мой взгляд.
|
|
|
|
|
Oct 4 2007, 13:20
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(prottoss @ Oct 4 2007, 19:57)  Но мне так и не понятно, отчего Код #define unsigned short int uint16_t хуже Код typedef unsigned short int uint16_t Объясните страждущему, плиз. В данном случае, видимо, большой разницы нет. Но вот попробуйте с помощью дефайна определить тип указателя на функцию? Про другие недостатки уже сказали. Лучше пользоваться теми средствами, которые явно предназначены. А использование макросов препроцессора свести к минимуму.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Oct 4 2007, 13:30
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(prottoss @ Oct 4 2007, 16:09)  Я тоже так подумал в начале спора, но мне почему то дали по шее  Правильно дали  Для начала не: Цитата #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 * // Дурной стиль без всякой на то надобности да и еще с побочными эффектами
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 4 2007, 13:40
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(dxp @ Oct 4 2007, 21:20)  В данном случае, видимо, большой разницы нет. Но вот попробуйте с помощью дефайна определить тип указателя на функцию? Про другие недостатки уже сказали. Лучше пользоваться теми средствами, которые явно предназначены. А использование макросов препроцессора свести к минимуму. Я же не говорил, что #define - панацея от всех бед. Я просто показал, как можно сделать, то что просил создатель ветки... А мне начали втыкивать про разрядность типов  Цитата(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 *
--------------------
|
|
|
|
|
Oct 4 2007, 17:34
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377

|
Цитата(Сергей Борщ @ Oct 4 2007, 13:15)  Я же вам ответил - эти типы описаны в файле stdint.h. Этот файл в IAR есть. И такое название он имеет в соответствии со стандартом ISO/IEC 9899:1999. Если у вас компилятор для AVR, то этот файл лежит в папке inc/dlib Один момент, при конфигурации проекта указывая библиотеку CLIB, подразумевая, что проект будет написан на Си, заголовочного файла естественно нет, конечно, если указать Normal DLIB, там есть. Если смысл указывать Normal DLIB когда весь проект планируется писать на только Си.
|
|
|
|
|
Oct 5 2007, 05:07
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(mdmitry @ Oct 4 2007, 23:26)  Если не изменяет память, то char на VAX 32 бита. По поводу типов: не проще ли посмотреть соответствующий заголовочный файл в WinAvr, где все это описано (<inttypes.h>). Минимальная разрядность для разных типов дана в #13, формула в посте #20, разъяснения дал resident в начале. Что тут еще обсуждать. PS. char в 2015 году м.б. 128 бит на некоторых uC. Это не противлречит стандарту, а 4 бита никогда.
|
|
|
|
|
Oct 5 2007, 07:15
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(_Алекс @ Oct 4 2007, 20:34)  Один момент, при конфигурации проекта указывая библиотеку CLIB, подразумевая, что проект будет написан на Си, заголовочного файла естественно нет, конечно, если указать Normal DLIB, там есть. Если смысл указывать Normal DLIB когда весь проект планируется писать на только Си. Ничто также не мешает писать программу на чистом С используя хедеры, библиотеки и компилятор С++.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|