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

 
 
> Проблемы c IAR AVR!
Yura_Kyiv
сообщение Nov 21 2006, 11:31
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 7-11-06
Пользователь №: 22 049



Имеется IAR 4.20. Выполняю небольшую программу и угадайте, что я получаю на выходе??? 32640+4294934528!!

unsigned long int L1=0,L2=0;
unsigned char C1;

int main( void )
{
C1=0x80;
L1=C1*255;
L2=C1*256;
return (L1+L2);
}

В Borland C++, Visual Studio результат правильный!
Только не надо говорить, что надо писать так или C1 должно быть Long Int!
L2=(long int)C1*256;

Как правильно настроить IAR????
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arttab
сообщение Nov 21 2006, 12:43
Сообщение #2


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

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Придется правильно писать, поскольку сначало делаются вычисления, а потом приведение к типу


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
tag
сообщение Nov 22 2006, 09:39
Сообщение #3


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

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(arttab @ Nov 21 2006, 13:43) *
Придется правильно писать, поскольку сначало делаются вычисления, а потом приведение к типу

...вообще-то можно типами оперировать и во время вычислений

Цитата(Yura_Kyiv @ Nov 21 2006, 12:31) *
Имеется IAR 4.20. Выполняю небольшую программу и угадайте, что я получаю на выходе??? 32640+4294934528!!

unsigned long int L1=0,L2=0;
unsigned char C1;

int main( void )
{
C1=0x80;
L1=C1*255;
L2=C1*256;
return (L1+L2);
}

В Borland C++, Visual Studio результат правильный!
Только не надо говорить, что надо писать так или C1 должно быть Long Int!
L2=(long int)C1*256;

Как правильно настроить IAR????




...странновато, потому что в процессе вычисления выражения компилятор сам должен приводить типы, в данном случае к unsigned long int, может компилятор кривой? ...попробуй в опциях для компилятора указать Strict ISO/ANSI
Go to the top of the page
 
+Quote Post
Yura_Kyiv
сообщение Nov 22 2006, 11:26
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 7-11-06
Пользователь №: 22 049



Цитата(tag @ Nov 22 2006, 08:39) *
...странновато, потому что в процессе вычисления выражения компилятор сам должен приводить типы, в данном случае к unsigned long int, может компилятор кривой? ...попробуй в опциях для компилятора указать Strict ISO/ANSI


Strict ISO/ANSI - не помогает!

К великому сожалению в опциях компилятора IAR для 8-разрядного процессора нельзя задать, что бы внутренние математические операции шли на уровне Long Int sad.gif , а не Int.
Поэтому 128*256= -32768. Высшая математика от IAR при содействии AVR smile.gif
Go to the top of the page
 
+Quote Post
_Bill
сообщение Nov 22 2006, 12:34
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(Yura_Kyiv @ Nov 22 2006, 11:26) *
Strict ISO/ANSI - не помогает!

К великому сожалению в опциях компилятора IAR для 8-разрядного процессора нельзя задать, что бы внутренние математические операции шли на уровне Long Int sad.gif , а не Int.
Поэтому 128*256= -32768. Высшая математика от IAR при содействии AVR smile.gif

Можно задать компилятору, чтобы действия выполнялись не только типа long, но и double.
Go to the top of the page
 
+Quote Post



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

 


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


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