roboforum.ru

Технический форум по робототехнике.

Возможно ли сравнение 32-разрядных чисел

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение dccharacter » 12 апр 2011, 11:00

http://www.codenet.ru/progr/asm/tasm/35.php
все, осознал проблему, отползаю.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Radist » 12 апр 2011, 11:05

Это запретная тема на форуме :) . В идеале лучше знать оба языка. Си - он и в африке Си. А знание асемблера полезно.
Аватара пользователя
Radist
 
Сообщения: 2241
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Strijar » 12 апр 2011, 13:48

Radist писал(а):А знание асемблера полезно.


Для этого существует gcc -O2 -S ;)
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Duhas » 12 апр 2011, 16:19

Angel71 писал(а):***
сколько вам понадобиться времени, чтоб на асме переделать вот в такой код?
***

а надо сначала думать, а не писать код методом чота написал за 10 мин, и 3 часа отлаживал..

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

Strijar писал(а):Для этого существует gcc -O2 -S
ну вас с вашими заклинаниями!
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение blindman » 12 апр 2011, 16:24

Юзайте 32-разрядные процессоры. И да пребудет с вами сила :)
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение GrayHunter » 13 апр 2011, 00:43

Сделал как вы советовали - компилируется, но светодиод просто горит и всё. :o
Хотя я подразумевал, делая эту тестовую программку, его выключение на 2 секунды, потом включение на 2 секунды. Посмотрите, пожалуйста...очень бы хотелось всё-таки добить этот код:
Код: Выделить всёРазвернуть
.include "m8def.inc"  ; подключаем заголовочный файл

.def     Temp=R16  ; разное
.def     SubSecondCount=R17
.def     Temp1=R18
.def     Temp2=R19
.def     Temp3=R20
.def     Temp4=R21
.def     LED=R22
.def     Time1=R23
.def     Time2=R24
.def     Time3=R25


.cseg
.org 0


;************_ НАСТРОЙКА ПРЕРЫВАНИЙ _************
rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp TIMER2_COMP
rjmp TIMER2_OVF
rjmp TIMER1_CAPT
rjmp TIMER1_COMPA
rjmp TIMER1_COMPB
rjmp TIMER1_OVF
rjmp TIMER0_OVF
rjmp SPI_STC
rjmp USART_RXC
rjmp USART_UDRE
rjmp USART_TXC
rjmp ADC_MY
rjmp EE_RDY
rjmp ANA_COMP
rjmp TWI
rjmp SPM_RDY

;Reset:
INT_0:
INT_1:
TIMER2_COMP:
TIMER2_OVF:
TIMER1_CAPT:
TIMER1_COMPA:
TIMER1_COMPB:
TIMER1_OVF:
;TIMER0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
ADC_MY:
EE_RDY:
ANA_COMP:
TWI:
SPM_RDY:
         reti
         
         
   Reset:    ldi Temp,0b11111111   ; настройка портов
             out DDRB,Temp
   
             ldi Temp,4
             out TCCR0,Temp
   
             ldi Temp,0b00000001   ; разрешение прерываний переполнения таймера 0
             out TIMSK,Temp
            
             ldi Temp, low(RAMEND)  ; инициализация стека
           out SPL, Temp  ; инициализация стека
           ldi Temp, high(RAMEND)  ; инициализация стека
           out SPH, Temp  ; инициализация стека
          
           sei ; разрешить прерывания
         
           ldi Temp,0b00000001  ; подаём напряение на определённые порты/ножеки, чтобы потом оно было нормальным, не тусклым
         out PortB,Temp
                cbi PORTB, PB0 ; погасить светодиод

clr Temp1
clr Temp2
clr Temp3

ldi LED,0
         Begin: cli ; запретить прерывания
ldi Temp1, $02               
ldi Temp,0

CPSE Temp, LED
rcall If_led_On
rcall If_led_Off
sei ; разрешить прерывания
rjmp Begin


;************_ ПОДПРОГРАММЫ  _************
If_led_Off: cp Time1, Temp1
cpc Time2, Temp2
cpc Time3, Temp3
BREQ On ; если равны
BRCC On ; если Time больше установленного времени
rjmp Begin ; иначе / если время ещё не прошло
On: sbi PORTB, PB0 ; зажечь светодиод
ldi LED,1
sei ; разрешить прерывания
rjmp Begin
ret

If_led_On: cp Time1, Temp1
cpc Time2, Temp2
cpc Time3, Temp3
BREQ Off ; если равны
BRCC Off ; если Time больше установленного времени
rjmp Begin ; иначе / если время ещё не прошло
Off: cbi PORTB, PB0 ; погасить светодиод
ldi LED,0
sei ; разрешить прерывания
rjmp Begin
ret
         
         
;************_ ОБРАБОТЧИК ПРЕРЫВАНИЯ Timer0 overflow _************         
   TIMER0_OVF: ldi Temp,6
            out TCNT0,Temp
            ldi Temp,1
            add SubSecondCount,Temp ; прибавить 1 к SubSecondCount
                CPI SubSecondCount, 125
                BRSH Plus_Second ; если получили >=125
   TIMER0_OVF_Exit: reti ;  иначе выход из обработчика
   Plus_Second: ldi SubSecondCount,0
clr Temp1
clr Temp2
clr Temp3
mov Temp1, Time1
mov Temp2, Time2
mov Temp3, Time3
ldi Temp4, 1
add Temp1, Temp4
clr Temp4
adc Temp2, Temp4
adc Temp3, Temp4
mov Time1, Temp1
mov Time2, Temp2
mov Time3, Temp3
             rjmp TIMER0_OVF_Exit ; к выходу из обработчика


А может дело в этих настройках (см. скрин)?
Снимок экрана 2011-04-13 в 0.38.03.png
GrayHunter
 
Сообщения: 231
Зарегистрирован: 06 июн 2009, 20:42
Откуда: Москва

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Angel71 » 13 апр 2011, 02:26

Duhas, что лучше сразу выбирать наиболее подходящий тип это понятно. а как на счёт ситуаций, когда нужно уже существующий код под текущие адаптировать? или когда изначально непонятно какой точности нужно и только эксперементально это можно выяснить? и т.д. :) вариантов хватает, только суть в другом. у человека простенькие програмки, камушков с головой хватает и по памяти и по производительности. си намного наглядней, вносить изменения в код на порядок проще и пока набираешся опыта в программирование это таки весомо + много других бонусов. а теперь посмотрите в заголовок топика, учитывая, что человек уже более года на асме пишет.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение GrayHunter » 13 апр 2011, 02:32

Я больше года ничего не писал, всё забыл :oops:
Посмотрите код, пожалуйста. Буду рад любой помощи, а то что-то у меня ничего не получается...
GrayHunter
 
Сообщения: 231
Зарегистрирован: 06 июн 2009, 20:42
Откуда: Москва

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Radist » 13 апр 2011, 06:26

Дело не в тех настройках. Посмотрел программу - черт ногу сломит. Пишите больше комментариев, они вам же и понадобятся через некоторое время. И учитесь пользоваться симуляторами. Ситуация, когда программа работает не так, как нужно, возникает очень часто. Ну будете же вы каждый раз просить помощи? (а если будете, то вряд ли ее получите). Пошаговое выполнение программы вам в помощь. А так видны, конечно, недочеты. Когда происходит обработка прерываний - надо быть очень осторожным, нигде не наследить (это как в прошлое слетать и бабочку раздавить там :) ). Если там используются регистры, которые также используются в основной программе, то их надо сохранять в стеке, а перед выходом снимать со стека в нужной последовательности (первый зашел - последний вышел). Если в прерывании идет работа с флагами - аналогичным образом надо сохранить статус регистр. Теперь про алгоритм мигания с периодом 2 секунды.

1 Таймер настраивается на максимальный прескалер, ему добавляется внешний регистр-расширитель таймера.
2 Флаг светодиода у вас уже есть, при достижении регистром расширителем нужного значения флаг ксорится, а таймер и регистр - расширитель перезагружаются.
3 Там же в прерывании проверяется состояние флага светодиода и выставляется нужное значение на ногу светодиода.
4 То есть вся ваша простенькая задачка - это несколько строчек в обработчике прерываний, в основной программе и делать нечего. Поставьте там вечный цикл после настройки таймера и портов.
Аватара пользователя
Radist
 
Сообщения: 2241
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение boez » 13 апр 2011, 10:33

Не, это ж у него пример именно для отработки взаимодействия обработчика и основной программы, изначально это все обсуждалось в соседней теме "фоновый режим". Там уже в обработчик не запихнешь. Не, на самом деле запихнуть можно, конкретно этот случай, он потолстеет, но при той частоте вызова это не помешает - но надо ж учиться и взаимодействию с основной программой.
+1 к симулятору, очень помогает понять как работают программы.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Radist » 13 апр 2011, 12:48

Ну тогда третий пункт алгоритма помещаем в основную программу.

Добавлено спустя 1 час 34 минуты 49 секунд:
Для топикстартера
Вложения
for_roboforum.zip
(6.08 КиБ) Скачиваний: 0
Аватара пользователя
Radist
 
Сообщения: 2241
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Radist » 14 апр 2011, 06:22

Исправленная версия.
Вложения
for_roboforum_2.zip
(6.92 КиБ) Скачиваний: 0
Аватара пользователя
Radist
 
Сообщения: 2241
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Пред.

Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15