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

 
 
> работа с unsigned long
st_user
сообщение Apr 30 2007, 11:50
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 29-04-07
Пользователь №: 27 409



Подскажите пожалуйста, какие настройки компилтятора необходимо задать, чтобы он заработал с типом unsigned long согласно стандарту ANSI C.

И вообще, такой вопрос: может ли нормально работать компилятор с этими переменными. Например если я сдвигаю из младшего слова в старшее? Не будет ли что-нибудь потеряно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Apr 30 2007, 14:51
Сообщение #2


Гуру
******

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



Не уверен, что это абсолютно правильно, но при операциях с long в ИАР я предпочитаю явно приводить все типы переменных и констант в выражении к long-у. Не зная типов переменных, участвующих в выражении, я бы написал все же так
Код
v0 += ((((unsigned long)v1<<4UL) + k0) ^ ((unsigned long)v1 + sum) ^ (((unsigned long)v1>>5UL) + (unsigned long)k1));

Или сделал бы может не столь наглядно, но проще, разбив сложную операцию, на более простые. По крайней мере советую в ИАР явно указывать тип констант суффиксами L(long) и UL(unsigned long).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 30 2007, 15:09
Сообщение #3


Гуру
******

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



Цитата(rezident @ Apr 30 2007, 14:51) *
Не уверен

Ну переменные, нежели они уже unsigned long совершенно незачем, если не unsigned long - тоже с разбором. А вот константы, которые int по умолчанию (а на AVR int, полагаю, 16bit) - надо. В параллельной ветке Автор конкретный контекст приводил, там я это и подправил.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 30 2007, 17:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Наблюдал "неодинаковость" работы IAR AVR и ICCAVR при работе с long. Сдвиг в принципе был, поскольку это было чтение из ADC высокой точности, в 16 бит не помещалось. Рабочий текст переносился с IAR на ICC из-за религиозных убеждений заказчика (пункт "Не укради!")
Не разбирался и разбираться не буду, так фирма клиента разорилась (жаба душила на IAR, вот и погорели smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post



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

 


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


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