реклама на сайте
подробности

 
 
> Не нашел .h файл в IAR с описанием uint8_t
_Алекс
сообщение Oct 3 2007, 19:55
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377



Похоже, в IAR нет что то типа inttypes.h, может есть у кого заголовочный файл с описанием типов uint8_t, uint16_t и т.д. для IAR как в AVRGCC например.
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 34)
Сергей Борщ
сообщение Oct 3 2007, 20:07
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Алекс @ Oct 3 2007, 22:55) *
Похоже, в IAR нет что то типа inttypes.h
Нету. В IAR есть стандартный stdint.h Если речь идет о компиляторе для AVR, то надо включить библиотеку DLIB.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 3 2007, 21:11
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Можно и самому создать хидер с типами, в чем проблема?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 01:20
Сообщение #4


Гуру
******

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



Цитата(_Алекс @ Oct 4 2007, 03:55) *
Похоже, в IAR нет что то типа inttypes.h, может есть у кого заголовочный файл с описанием типов uint8_t, uint16_t и т.д. для IAR как в AVRGCC например.


Код
#define uint8_t unsigned char

#define uint16_t unsigned int
и т.д


--------------------
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 4 2007, 03:00
Сообщение #5


Познающий...
******

Группа: Свой
Сообщений: 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;
и т.д.
Таким образом мы вводим новые типы, которые поддаются контролю компилятора.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
_Алекс
сообщение Oct 4 2007, 04:14
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377



Мне кажется лучше пользоваться готовыми встроенными средствами компилятора, если подходят, если нет, писать самому. Использую IAR компилятор для AVR. Похоже надо писать самому.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 4 2007, 10:15
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Алекс @ Oct 4 2007, 07:14) *
Использую IAR компилятор для AVR. Похоже надо писать самому.
Я же вам ответил - эти типы описаны в файле stdint.h. Этот файл в IAR есть. И такое название он имеет в соответствии со стандартом ISO/IEC 9899:1999. Если у вас компилятор для AVR, то этот файл лежит в папке inc/dlib


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 10:29
Сообщение #8


Гуру
******

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



Цитата(haker_fox @ Oct 4 2007, 11:00) *
Наверно правильнее все таки так:
typedef unsigned char uint8_t;
typedef unsinged short int uint16_t;
и т.д.
Таким образом мы вводим новые типы, которые поддаются контролю компилятора.
А зачем мне вводить новый тип, если меня вполне устраивает старый, кроме того, что он длинно пишется :-) - unsinged short int - и я переживаю за свою мультимедийную клавиатуру


--------------------
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 4 2007, 10:37
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(prottoss @ Oct 4 2007, 13:29) *
А зачем мне вводить новый тип, если меня вполне устраивает старый, кроме того, что он длинно пишется :-)
Видимо для того, чтобы переменная имела 16 бит и на ARM и на AVR.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 10:43
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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 для двух вышеназванных платформ будет разной длины?


--------------------
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 4 2007, 10:53
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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 разрядность схожих типов данных может быть тоже различной.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 11:05
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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 я в учет не беру, потому что тип этот на самом деле с "плавающей" разрядностью от платформы к платформе


--------------------
Go to the top of the page
 
+Quote Post
alexander55
сообщение Oct 4 2007, 11:17
Сообщение #13


Бывалый
*****

Группа: Свой
Сообщений: 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 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 я в учет не беру, потому что тип этот на самом деле с "плавающей" разрядностью от платформы к платформе

Не спорьте, не заводитесь.

Сообщение отредактировал alexander55 - Oct 4 2007, 11:14
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 11:23
Сообщение #14


Гуру
******

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



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


--------------------
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 4 2007, 11:23
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 4 2007, 11:27
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 4 2007, 11:33
Сообщение #17


Adept
******

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



Цитата(rezident @ Oct 4 2007, 17:53) *
char>=short>=int>=long

Чуть-чуть наоборот. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 11:35
Сообщение #18


Гуру
******

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



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



Вот таблица
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 4 2007, 11:36
Сообщение #19


Adept
******

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



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

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

TMS320F28xx. 16 бит.

Дело не том, старые или новые платформы. Вот TMS вполне новый. Дело в принципе. Завтра может появиться еще платформа, у которой типы будут иметь "непривычную" разрядность. Стандарт регламентирует правила, все обязаны их соблюдать, для того правила и придуманы. Если кто-то их не соблюдает, он сам себе злобный буратина.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 4 2007, 11:51
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(dxp @ Oct 4 2007, 17:33) *
Чуть-чуть наоборот. smile.gif

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

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

Отвечу. Читайте внимательно стандарт ANSI C.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 12:03
Сообщение #21


Гуру
******

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



Цитата(dxp @ Oct 4 2007, 19:36) *
TMS320F28xx. 16 бит.
А что за компилятор?


--------------------
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 4 2007, 12:45
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 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.

То бишь он в полном соответствии со стандартом разработан wink.gif
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 12:57
Сообщение #23


Гуру
******

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



Хорошо, признаю, был не прав 05.gif



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

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


--------------------
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 4 2007, 13:02
Сообщение #24


Шаман
******

Группа: Модераторы
Сообщений: 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 будет отнесён ими не к типам, как по логике, а к макросам.
Только и всего, на мой взгляд.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 13:09
Сообщение #25


Гуру
******

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



Цитата(IgorKossak @ Oct 4 2007, 21:02) *
Да ничем не хуже.
Я тоже так подумал в начале спора, но мне почему то дали по шее smile.gif


--------------------
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 4 2007, 13:20
Сообщение #26


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
Объясните страждущему, плиз.

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


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 4 2007, 13:30
Сообщение #27


Гуру
******

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



Цитата(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 * // Дурной стиль без всякой на то надобности да и еще с побочными эффектами


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 13:40
Сообщение #28


Гуру
******

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



Цитата(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 *


--------------------
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 4 2007, 14:10
Сообщение #29


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(prottoss @ Oct 4 2007, 16:40) *
а dd типа char *
char. Сюрприз.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 4 2007, 14:18
Сообщение #30


Гуру
******

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



Цитата(Сергей Борщ @ Oct 4 2007, 22:10) *
char. Сюрприз.
Но я не предлагал через #define объявлять указатели. Это ваши загадки, на которые вы сами знаете ответы.


--------------------
Go to the top of the page
 
+Quote Post
_Алекс
сообщение Oct 4 2007, 17:34
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 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 когда весь проект планируется писать на только Си.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 4 2007, 18:10
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



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

А чем помешает указание Normal DLIB писательству "на только Си"? В крайнем случае можно требуемые хидеры из каталога DLIB скопировать в каталог своего проекта.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Oct 4 2007, 19:26
Сообщение #33


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Если не изменяет память, то char на VAX 32 бита.
По поводу типов: не проще ли посмотреть соответствующий заголовочный файл в WinAvr, где все это описано (<inttypes.h>).


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
alexander55
сообщение Oct 5 2007, 05:07
Сообщение #34


Бывалый
*****

Группа: Свой
Сообщений: 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 бита никогда. 07.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 5 2007, 07:15
Сообщение #35


Шаман
******

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



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

Ничто также не мешает писать программу на чистом С используя хедеры, библиотеки и компилятор С++.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 06:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01739 секунд с 7
ELECTRONIX ©2004-2016