|
volatile uint16_t* и volatile unsigned chort*, какие-то странности в avr-gcc (WinAVR 20090313) 4.3.2 |
|
|
|
Jul 12 2009, 15:54
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Код volatile uint16_t* p1 = &OCR3A; volatile unsigned short* p2 = &OCR3A; На вторую строчку получаю: warning: initialization from incompatible pointer type Компилятор правильно проводит различие между unsigned int и unsigned short - это разные типы. Есть определение в stdint.h: typedef unsigned int uint16_t; а в нашем случае (avr-gcc) int реально эквивалентен short. Макросы в sfr_defs.h во всю используют uint16_t. Короче где-то не стыковка, или у меня в голове или не совсем корректно объявлен uint16_t (на мой взгляд, надо его объявлять через unsigned short). Кто рассудит?
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
 |
Ответов
|
Jul 12 2009, 16:01
|

Частый гость
 
Группа: Участник
Сообщений: 98
Регистрация: 3-03-09
Пользователь №: 45 590

|
Цитата(demiurg_spb @ Jul 12 2009, 19:54)  Код volatile uint16_t* p1 = &OCR3A; volatile unsigned short* p2 = &OCR3A; На вторую строчку получаю: warning: initialization from incompatible pointer type В чём прикол? Попробуй так: volatile unsigned long* p2 = &OCR3A;
Сообщение отредактировал AirDevil - Jul 12 2009, 16:03
|
|
|
|
|
Jul 12 2009, 16:30
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
2 Zltigo: я понимаю, что типы разные (Вы быстро ответили на мой вопрос, пока я его пытался переформулировать его более точно)... Цитата(AirDevil @ Jul 12 2009, 20:01)  volatile unsigned long* p2 = &OCR3A; А зачем пробовать? Тем более тыкать пальцем в небо? Лучше водку пробовать с борщиком  Тут вопрос не что попробовать, а почему так нестрого объявлен uint16_t? Ведь здесь не требуется привязка к типу int, который самый нативный для большинства архитектур. Тут требуется лишь строго лимитировать тип 16-ю битами и всё, а этого как раз и не происходит! Не понимаю я чего-то в этой жизни...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jul 12 2009, 20:26
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Сергей Борщ @ Jul 12 2009, 22:42)  short лимитирован так же нестрого. Поэтому принципиальной разницы нет никакой. Интересно... Надо заглянуть в стандарт. Но как по мне, так short наиболее близок uint16_t. Уже даже не могу сказать почему, так было всегда в моей голове. Аминь  Посмотрел, там сказано: short int <= int <= long int Ещё почитал такой документ "WG14/N1124 Committee Draft — May 6, 2005 ISO/IEC 9899:TC2" и нашёл следующее. Sizes of integer types <limits.h> maximum value for an object of type unsigned short int USHRT_MAX 65535 // 2^16 − 1 maximum value for an object of type unsigned int UINT_MAX 65535 // 2^16 − 1 Так что похоже принципиальной разницы действительно нет. Сила привычки, блин. Никак не могу перейти к использованию типов из stdint. Похоже надо это сделать чтоб не париться больше по поводу размерности типов данных и наедятся лишь на компиляторописателей, на их адекватность.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jul 14 2009, 06:08
|

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

|
Цитата(demiurg_spb @ Jul 12 2009, 23:26)  "WG14/N1124 Committee Draft — May 6, 2005 ISO/IEC 9899:TC2" и нашёл следующее. Ну да. " Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign" Цитата(zltigo @ Jul 14 2009, 08:58)  Отнюдь не всегда, ибо правильные компиляторы имеют свои внутренние типы и переопределение в некоторых случаях происходит именно в них а не в типовые int и иже с ним. Что лишь добавляет эффективности. Цитата(zltigo @ Jul 14 2009, 08:58)  Проблема в том, что поведение определенных таким образом заковыристых типов ...fast..,...least... отличается умом и сообразительностью. Иногда излишней и вгоняющей у недоумение. Пока нарывался на то, что тип uint_fast8_t при увеличении на 1 значения 255 получает значение 256, но, как говорится, сам себе злобный Буратина, просил не менее 8 бит, про "не более" речи не было. Цитата(zltigo @ Jul 14 2009, 08:58)  Посему я тоже стал пользоватся только собственными типами из канонических byte,short,int.... Не вижу необходимости. Лишняя писанина, несовместимость со сторонними разработчиками.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 14 2009, 06:39
|

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

|
Цитата(Сергей Борщ @ Jul 14 2009, 09:08)  Что лишь добавляет эффективности. Во многих случаях, если пользоваться более-менее бездумно, то это несомненно безмерно лучше всюду натыканных byte и прочих.... Но если прикладывать руки.... то я от них ушел. Цитата Лишняя писанина Пару-тройку typedef трудно назвать писаниной  а потом даже короче, ибо C99 типы уж больно длинны для глаз. Цитата , несовместимость со сторонними разработчиками. 100% совместимость - один хидер и все. Цитата(Сергей Борщ @ Jul 14 2009, 09:08)  Пока нарывался на то, что тип uint_fast8_t при увеличении на 1 значения 255 получает значение 256... А я встречал, что тот-же uint_least8_t на 32bit платформе имеет размер в зависимости от своей логики, причем соответственно тот-же эффект 255->256 при этом будет, то прояляется, то нет. Мне такие фокусы пришлись не по душе.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 14 2009, 11:16
|

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

|
Цитата(Petka @ Jul 14 2009, 09:46)  Примеры в студию. Желательно с комментариями "хотел того-то, получил то и то, а в стандарте так-то". Хотел одно, получил другое, а в стандарте, по этому поводу ПРОСТО НИЧЕГО - все на откуп разработчикам компиляторов. Посему и пользую "свои". Цитата(Сергей Борщ @ Jul 14 2009, 11:36)  Если уж заложился на least, то при написании нельзя полагаться на какое-либо конкретное поведение 255->256..... Угу на это нельзя полагаться, на занимаемый размер в памяти нельзя полагаться..... Если я знаю, что творю, то лучше, чуть-чуть потратив времении я буду писать то, на что могу полагаться на конкретной платформе (и поменяв typedef портировать на другую). Тем более, что всегда можно "свои" типы и в C99 переопределить легким движением пальцев.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 17 2009, 14:37
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(zltigo @ Jul 14 2009, 16:16)  Хотел одно, получил другое, а в стандарте, по этому поводу ПРОСТО НИЧЕГО - все на откуп разработчикам компиляторов. Ну уж это неправда. Цитата 7.18.1.1 Exact-width integer types 1 The typedef name intN_t designates a signed integer type with width N, no padding bits, and a two’s complement representation. Thus, int8_t denotes a signed integer type with a width of exactly 8 bits.
7.18.1.2 Minimum-width integer types 2 The typedef name uint_leastN_t designates an unsigned integer type with a width of at least N , such that no unsigned integer type with lesser size has at least the specified width. Thus, uint_least16_t denotes an unsigned integer type with a width of at least 16 bits. Цитата(zltigo @ Jul 14 2009, 16:16)  Угу на это нельзя полагаться, на занимаемый размер в памяти нельзя полагаться..... Совершенно спокойно можно полагаться на то, что написано в спецификации языка. В случае того же uint_least8_t можно быть уверенным, что его размер будет не меньше 8 бит, а в случае uint8_t - что размер будет точно 8 бит.
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Jul 17 2009, 15:01
|

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

|
Цитата(alx2 @ Jul 17 2009, 17:37)  Ну уж это неправда. Да ну  . Вы полагаете, что Вам издалека сейчас типа "виднее"  . Цитата Совершенно спокойно можно полагаться на то, что написано в спецификации языка. Повторяю - в стандарте написано столь МАЛО и это настолько НИЧТОЖНО регламентирует поведение компиляторов, что лично меня это не очень устраивает. Цитата В случае того же uint_least8_t можно быть уверенным, что его размер будет не меньше 8 бит.... Потрасающее "уточнение"  стандарнта - неужели кто-то мог подумать, что размер такого типа будет меньше 8bit??? Нет? Так чего там такого в стандарте написано? Ничего  на самом деле НИЧЕГО вразумительного кроме абсолютной банальности не написано. Посему в подавляющем большинстве случаев я предпочитаю четко выражать свои требования через менее размыто определенные для конкретной платформы типы.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 17 2009, 17:54
|

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

|
Цитата(Petka @ Jul 17 2009, 19:30)  Одного понять не могу: откуда такая неприязнь к с99 типам? Я достаточно подробно объяснял. Если это находится за пределами Вашего понимания, то.... это не мои проблемы. Кроме того, никакой неприязни нет - это много много много лучшее решение нежели использование, напимер, где ни попадя всяких byte. Просто есть еще лучшие, решения, если подумать  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
demiurg_spb volatile uint16_t* и volatile unsigned chort* Jul 12 2009, 15:54 zltigo Цитата(demiurg_spb @ Jul 12 2009, 18:54) ... Jul 12 2009, 15:58    rezident Цитата(demiurg_spb @ Jul 13 2009, 02:26) ... Jul 13 2009, 16:15     Сергей Борщ Цитата(rezident @ Jul 13 2009, 19:15) Про... Jul 14 2009, 05:51      zltigo Цитата(Сергей Борщ @ Jul 14 2009, 08:51) ... Jul 14 2009, 05:58       demiurg_spb Цитата(zltigo @ Jul 14 2009, 09:58) ...пр... Jul 14 2009, 11:00            Petka Цитата(zltigo @ Jul 17 2009, 21:54) Я дос... Jul 17 2009, 20:47             zltigo Цитата(Petka @ Jul 17 2009, 23:47) Никаки... Jul 18 2009, 05:13          aesok Цитата(zltigo @ Jul 17 2009, 19:01) >... Jul 17 2009, 19:16          alx2 Цитата(zltigo @ Jul 17 2009, 20:01) Да ну... Jul 20 2009, 13:17      rezident Цитата(zltigo @ Jul 14 2009, 12:39) Пару-... Jul 14 2009, 08:07      Сергей Борщ Цитата(zltigo @ Jul 14 2009, 09:39) А я в... Jul 14 2009, 08:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|