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

 
 
> volatile uint16_t* и volatile unsigned chort*, какие-то странности в avr-gcc (WinAVR 20090313) 4.3.2
demiurg_spb
сообщение Jul 12 2009, 15:54
Сообщение #1


неотягощённый злом
******

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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AirDevil
сообщение Jul 12 2009, 16:01
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jul 12 2009, 16:30
Сообщение #3


неотягощённый злом
******

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



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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 12 2009, 18:42
Сообщение #4


Гуру
******

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



Цитата(demiurg_spb @ Jul 12 2009, 19:30) *
Тут требуется лишь строго лимитировать тип 16-ю битами и всё, а этого как раз и не происходит!
short лимитирован так же нестрого. Поэтому принципиальной разницы нет никакой.


--------------------
На любой вопрос даю любой ответ
"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
demiurg_spb
сообщение Jul 12 2009, 20:26
Сообщение #5


неотягощённый злом
******

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



Цитата(Сергей Борщ @ Jul 12 2009, 22:42) *
short лимитирован так же нестрого. Поэтому принципиальной разницы нет никакой.
Интересно... Надо заглянуть в стандарт. Но как по мне, так short наиболее близок uint16_t. Уже даже не могу сказать почему, так было всегда в моей голове. Аминьsmile.gif

Посмотрел, там сказано: 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.
Похоже надо это сделать чтоб не париться больше по поводу размерности типов данных и наедятся лишь на компиляторописателей, на их адекватность.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 14 2009, 06:08
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 14 2009, 06:39
Сообщение #7


Гуру
******

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



Цитата(Сергей Борщ @ Jul 14 2009, 09:08) *
Что лишь добавляет эффективности.

Во многих случаях, если пользоваться более-менее бездумно, то это несомненно безмерно лучше всюду натыканных byte и прочих.... Но если прикладывать руки.... то я от них ушел.
Цитата
Лишняя писанина

Пару-тройку typedef трудно назвать писаниной smile.gif а потом даже короче, ибо 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
Go to the top of the page
 
+Quote Post
Petka
сообщение Jul 14 2009, 06:46
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(zltigo @ Jul 14 2009, 10:39) *
А я встречал, что тот-же uint_least8_t на 32bit платформе имеет размер в зависимости от своей логики, причем соответственно тот-же эффект 255->256 при этом будет, то прояляется, то нет. Мне такие фокусы пришлись не по душе.

Примеры в студию. Желательно с комментариями "хотел того-то, получил то и то, а в стандарте так-то".
Какие у вас собственные типы?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - zltigo   Цитата(Petka @ Jul 14 2009, 09:46) Пример...   Jul 14 2009, 11:16
|- - alx2   Цитата(zltigo @ Jul 14 2009, 16:16) Хотел...   Jul 17 2009, 14:37
|- - zltigo   Цитата(alx2 @ Jul 17 2009, 17:37) Ну уж э...   Jul 17 2009, 15:01
|- - Petka   Цитата(zltigo @ Jul 17 2009, 19:01) Потра...   Jul 17 2009, 16:30
||- - zltigo   Цитата(Petka @ Jul 17 2009, 19:30) Одного...   Jul 17 2009, 17:54
||- - 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


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 04:17
Рейтинг@Mail.ru


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