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

 
 
> Ошибка в AVR Studio4
Wild007
сообщение Oct 30 2006, 07:58
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Подскажите пожалуйста!!! Уже час не могу создать MACRO.
Привожу отрывок:
. . . .
.EQU TTT=4100/1000000
LDI r17,0x100-(TTT*20000000/1024)
. . . . .
выдает "error: Operand(s) out of range in 'ldi r17,0x100'"
Считаю на калькуляторе -- значение в скобках =0x50.
В чем проблема? (цифры приведены так как они передаются в MACROS по параметрам и просьба их не обсуждать)


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
xemul
сообщение Oct 31 2006, 15:11
Сообщение #2



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Выражение
Цитата
(A/B*C/D)

вычисляется препроцессором слева направо как целочисленное, и с указанными значениями
A/B = 0 без вариантов.
К сожалению, Вам придется самому следить за переполнением и потерей точности в таких выражениях.
Выражение (A*С/B/D) не приведет ни к потере точности, ни к переполнению.

Занятно:
Код
.EQU A=4100.0
.EQU B=1000000
.EQU C=20000000
.EQU D=1024

    LDI R18,low($100-INT(4100.0/B*C/D))
    LDI R19,high($100-INT(A/B*C/D))

в R18 получим 0xb0 - правильно, а в R19 0x01 - неправильно.
Таки косячок имеется.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 1 2006, 08:20
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(xemul @ Oct 31 2006, 17:11) *
Выражение
Цитата
(A/B*C/D)

вычисляется препроцессором слева направо как целочисленное, и с указанными значениями
A/B = 0 без вариантов.
К сожалению, Вам придется самому следить за переполнением и потерей точности в таких выражениях.
Выражение (A*С/B/D) не приведет ни к потере точности, ни к переполнению.

Занятно:
Код
.EQU A=4100.0
.EQU B=1000000
.EQU C=20000000
.EQU D=1024

    LDI R18,low($100-INT(4100.0/B*C/D))
    LDI R19,high($100-INT(A/B*C/D))

в R18 получим 0xb0 - правильно, а в R19 0x01 - неправильно.
Таки косячок имеется.

А если так сделать?
Код
.EQU A=4100.0
.EQU B=1000000.0
.EQU C=20000000.0
.EQU D=1024.0

    LDI R18,low($100-INT(4100.0/B*C/D))
    LDI R19,high($100-INT(A/B*C/D))
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Wild007   Ошибка в AVR Studio4   Oct 30 2006, 07:58
- - TriD   HEX обозначается как $100   Oct 30 2006, 08:08
|- - Wild007   Цитата(TriD @ Oct 30 2006, 11:08) HEX обо...   Oct 30 2006, 08:14
|- - Wild007   конструкция: .EQU TTT=0.0041 LDI r17,$100-(TT...   Oct 30 2006, 08:27
- - arttab   Цитата4100/1000000 Равно 0, а не 0,0041. и ругает...   Oct 30 2006, 08:12
|- - Wild007   Цитата(arttab @ Oct 30 2006, 11:12) Цитат...   Oct 30 2006, 08:34
- - arttab   а мой вариант?   Oct 30 2006, 08:30
- - arttab   .EQU TTT=0.0041*20000000 LDI r17,0x100-(TTT/1024) ...   Oct 30 2006, 08:41
|- - Wild007   Цитата(arttab @ Oct 30 2006, 11:41) .EQU ...   Oct 30 2006, 08:56
- - arttab   Думаю что с <1   Oct 30 2006, 08:59
|- - GinRider   Думаю, что компилятор автоматически использует INT...   Oct 30 2006, 11:47
|- - Wild007   Цитата(GinRider @ Oct 30 2006, 14:47) Дум...   Oct 31 2006, 06:35
- - Yura_K   Если использовать ассемблер первой версии (avrasm)...   Oct 30 2006, 14:05
- - Andreas1   У меня не получалось назначить через .EQU нецелое...   Oct 31 2006, 07:30
- - Wild007   Решил проверить коректность работы компилятора, со...   Oct 31 2006, 14:16
|- - xemul   Цитата(IgorKossak @ Nov 1 2006, 11:20) Ци...   Nov 1 2006, 10:54
- - Gennadiy_   Я писал так: Код.equ quant=(CK/64)/256 .e...   Oct 31 2006, 16:58
- - Wild007   Даа, проверять, проверять и еще раз проврять... (с...   Nov 1 2006, 06:56
- - Wild007   Проверил в Студии: .EQU A=4100.0 .EQU B=1000000.0...   Nov 1 2006, 08:42
- - Andreas1   А чем не нравится так #define A 4100.0 #define B 1...   Nov 1 2006, 09:06
|- - Wild007   Цитата(Andreas1 @ Nov 1 2006, 12:06) А че...   Nov 1 2006, 09:15
- - Andreas1   ЦитатаЭто все хорошо, но А,C и D это параметры кот...   Nov 1 2006, 09:42
- - Wild007   .MACRO DELAYMKS ; ..... LDI R18,$100-(@0/1...   Nov 1 2006, 09:50
- - Andreas1   Ну тогда так .MACRO DELAYMKS ; ..... LDI R18,...   Nov 1 2006, 10:06
- - Wild007   .MACRO DELAYMKS ; ..... LDI R18,$100-INT(@0/1...   Nov 1 2006, 12:11


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

 


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


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