roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 21:38

Часовой пояс: UTC + 4 часа




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 27 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 12 апр 2011, 11:00 
Не в сети
Аватара пользователя

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

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 12 апр 2011, 11:05 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 12 апр 2011, 13:48 
Не в сети
Аватара пользователя

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


Для этого существует gcc -O2 -S ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 12 апр 2011, 16:19 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
Angel71 писал(а):
***
сколько вам понадобиться времени, чтоб на асме переделать вот в такой код?
***

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

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

Strijar писал(а):
Для этого существует gcc -O2 -S
ну вас с вашими заклинаниями!

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 12 апр 2011, 16:24 
Не в сети
Аватара пользователя

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

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

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



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 13 апр 2011, 00:43 
Не в сети

Зарегистрирован: 06 июн 2009, 20:42
Сообщения: 231
Откуда: Москва
Сделал как вы советовали - компилируется, но светодиод просто горит и всё. :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
Снимок экрана 2011-04-13 в 0.38.03.png [ 30.61 КиБ | Просмотров: 1271 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 13 апр 2011, 02:26 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 13 апр 2011, 02:32 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 13 апр 2011, 06:26 
Не в сети
Аватара пользователя

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

1 Таймер настраивается на максимальный прескалер, ему добавляется внешний регистр-расширитель таймера.
2 Флаг светодиода у вас уже есть, при достижении регистром расширителем нужного значения флаг ксорится, а таймер и регистр - расширитель перезагружаются.
3 Там же в прерывании проверяется состояние флага светодиода и выставляется нужное значение на ногу светодиода.
4 То есть вся ваша простенькая задачка - это несколько строчек в обработчике прерываний, в основной программе и делать нечего. Поставьте там вечный цикл после настройки таймера и портов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 13 апр 2011, 10:33 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 13 апр 2011, 12:48 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Ну тогда третий пункт алгоритма помещаем в основную программу.

Добавлено спустя 1 час 34 минуты 49 секунд:
Для топикстартера


Вложения:
for_roboforum.zip [6.08 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Возможно ли сравнение 32-разрядных чисел
СообщениеДобавлено: 14 апр 2011, 06:22 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
Исправленная версия.


Вложения:
for_roboforum_2.zip [6.92 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 27 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO