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

 
 
 
Reply to this topicStart new topic
> AVR-GCC: warning "large integer implicitly truncated to unsigned type", как побороть?
ARV
сообщение Dec 15 2010, 06:44
Сообщение #1


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



сделал вот такие макросы:
Код
#define s65_w8(x)        do { \
    clr(CS); \
    spi_out_wait(x); \
    set(CS); \
    }while(0)
/// вывод 16 бит команды
#define s65_cmd16(x)    do { \
    set(RS); \
    s65_w8((x)>>8); \
    s65_w8(x); \
    } while(0)

#define    set(x)        S65_PORT |= (x)
#define    clr(x)        S65_PORT &= ((x)^0xFF)

теперь их использую:
Код
uint8_t x;
#define ASX 0x1200

s65_cmd16(0x1806); // ЕСТЬ ВАРНИНГ
s65_cmd16(ASX+x); // НЕТ ВАРНИНГА

в общем, не могу понять, в каком месте возникает это самое усекновение знакового числа в беззнаковое... надоела куча варнингов... можно отключить, но надо ж понять...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 15 2010, 06:52
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата
...
s65_w8(x & 0xff); \
...

?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 15 2010, 07:15
Сообщение #3


Гуру
******

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



QUOTE (_Pasha @ Dec 15 2010, 12:52) *
s65_w8(x & 0xff);

Фу sad.gif (два раза,один за отсутствие скобок, второй за 0xFF)
s65_w8( (unsigned short)(x));




--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 15 2010, 07:21
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(zltigo @ Dec 15 2010, 13:15) *
Фу sad.gif

Принято laughing.gif
Go to the top of the page
 
+Quote Post
ARV
сообщение Dec 15 2010, 07:24
Сообщение #5


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



а почему так было?
Код
s65_cmd16(0x1806); // ЕСТЬ ВАРНИНГ
s65_cmd16(ASX+x); // НЕТ ВАРНИНГА


вообще говоря, я был уверен, что варнинга не должно быть, если в байтовую переменную заносим двухбайтное значение - тупо берется младший байт и все. оказалось - и варнинг при этом всплывает...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Dec 15 2010, 08:13
Сообщение #6


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Если двухбайтовую переменную или выражение с переменными, то молча приводит тип, а если слишком большую константу, то ворчит. Такие у него взгляды на жизнь. Типа программист с переменной и так знает, что делает, а с константой мог и промахнуться нечаянно.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 15 2010, 08:16
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(zltigo @ Dec 15 2010, 13:15) *
s65_w8( (unsigned short)(x));

Кстати - вопрос родился. Не считают ли уважаемые, что используя <stdint.h>, возвращаться обратно к встроенным целым типам чревато?
Go to the top of the page
 
+Quote Post
ARV
сообщение Dec 15 2010, 08:26
Сообщение #8


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(ReAl @ Dec 15 2010, 14:13) *
Если двухбайтовую переменную или выражение с переменными, то молча приводит тип, а если слишком большую константу, то ворчит. Такие у него взгляды на жизнь. Типа программист с переменной и так знает, что делает, а с константой мог и промахнуться нечаянно.
вот из-за этих взглядов я и вынужден был беспокоить общественность sm.gif)) подвох, однако...

2 _Pasha: ну так можно (uint8_t)(x)


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 15 2010, 08:34
Сообщение #9


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(ARV @ Dec 15 2010, 14:26) *
2 _Pasha: ну так можно (uint8_t)(x)

Я к тому, что на определенном этапе эти сущности перестают быть тождественными, или могут перестать. А типы с неизменной длиной для протокольных частей ой как нужны. Так?
Go to the top of the page
 
+Quote Post
ARV
сообщение Dec 15 2010, 08:51
Сообщение #10


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(_Pasha @ Dec 15 2010, 14:34) *
Так?
так sm.gif


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

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

 


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


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