не надо оптимально, надо, чтобы работало. допустим, с секундами понятно, допишите кусочек для минут, ибо что дальше делать - не очень понятно...ploop писал(а):Вот, тупо в лоб. Говорю - не оптимально будет
Нужен оптимальный алгоритм RTC
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Нужен оптимальный алгоритм RTC
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
Re: Нужен оптимальный алгоритм RTC
А у мя, хоть понятно получилось?Мастер Ломастер писал(а):ибо что дальше делать - не очень понятно...
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Re: Нужен оптимальный алгоритм RTC
Дык у нас он одинаковый почти 
Я тоже не всё понял, но суть та же.
В моём коде 11 команд ровно по 1 такту получилось, это на секунды/минуты,часы. На дни/месяцы больше будет - там грузить кол-во дней, учитывать високосный год и т.д.
Может, кто еще что придумает?
Я тоже не всё понял, но суть та же.
В моём коде 11 команд ровно по 1 такту получилось, это на секунды/минуты,часы. На дни/месяцы больше будет - там грузить кол-во дней, учитывать високосный год и т.д.
Может, кто еще что придумает?
Re: Нужен оптимальный алгоритм RTC
Мастер Ломастер, там аналогично. Ща напишу.
Код: Выделить всё
clr r17 ; r17 <- 0
lds r16,clk_ss ; грузим секунды
cpi r16,60 ; сравниваем
rol r17 ; r17 <- C
bst r17,0 ; T <- C
ror r17 ; Восстановим С
adc r16,null ; Если не перевалило - r16 увеличится на 1
bld r17,0 ; r17 <- T
neg r17 ; r17 = 0-r17
and r16,r17 ; Маску на r16
sts clk_ss,r16 ; Пишем его
clr r17 ; r17 <- 0
lds r16,clk_mm ; грузим минуты
cpi r16,60 ; сравниваем
rol r17 ; r17 <- C
bst r17,0 ; T <- C
ror r17 ; Восстановим С
adc r16,null ; Если не перевалило - r16 увеличится на 1
bld r17,0 ; r17 <- T
neg r17 ; r17 = 0-r17
and r16,r17 ; Маску на r16
sts clk_mm,r16 ; Пишем его
clr r17 ; r17 <- 0
lds r16,clk_hh ; грузим часы
cpi r16,24 ; сравниваем
rol r17 ; r17 <- C
bst r17,0 ; T <- C
ror r17 ; Восстановим С
adc r16,null ; Если не перевалило - r16 увеличится на 1
bld r17,0 ; r17 <- T
neg r17 ; r17 = 0-r17
and r16,r17 ; Маску на r16
sts clk_hh,r16 ; Пишем его
Последний раз редактировалось ploop Пн ноя 21, 2011 19:55:28, всего редактировалось 1 раз.
Re: Нужен оптимальный алгоритм RTC
все ради интереса. и только на сях.Может, кто еще что придумает?
одно время.
Код: Выделить всё
iong int x;
**********
x++;
x=x%86400;
**********
sek=x%60;
min=(x-(x/3600*3600))/60;
hour=x/3600;Код: Выделить всё
sec++;
min=min+(sec/59);
hour=hour+(min/59)
sec=sec%60;
min=min%60;
hour=hour%24
Последний раз редактировалось O-LED Пн ноя 21, 2011 19:58:30, всего редактировалось 1 раз.
KIT
- Реклама
Re: Нужен оптимальный алгоритм RTC
А как количество дней в месяце, високосный год?время+календарь.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Нужен оптимальный алгоритм RTC
то пусто, то густоМитяРа писал(а):А у мя, хоть понятно получилось?Мастер Ломастер писал(а):ибо что дальше делать - не очень понятно...
я вижу в этом подходе только одно преимущество: строго фиксированное число тактов на обсчет независимо от значений счетчиков. в некоторых случаях это может быть решающим, но в бОльшем числе случаев... гемор однако
битва с дураками проиграна, победители торжествуют. слава победителям!
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Нужен оптимальный алгоритм RTC
ради интереса - принимается. а в практических целях это, имхо, худший вариантO-LED писал(а):все ради интереса. и только на сях.
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Нужен оптимальный алгоритм RTC
ну наверное можно завести массив mass с количеством дней в месяц.ploop писал(а):А как количество дней в месяце, високосный год?время+календарь.
Код: Выделить всё
Number=Number%mass[Month];ну слава богу.Мастер Ломастер писал(а):ради интереса - принимается. а в практических целях это, имхо, худший вариантO-LED писал(а):все ради интереса. и только на сях.деление и вычисление остатка от деления - вещи весьма накладные...
KIT
Re: Нужен оптимальный алгоритм RTC
Тут дело вот в чём... Формально переход к подпрограмме + возврат из неё = 4+4=8 тактов, т.е.линейный алгоритм в этом случае короче почти в два раза. Но он пробегает весь цикл вычисления, соответственно чисто для секунд получается намного дольше.и что-то мне подсказывает, итог будет не компактней "тупого" подсчета с ветвлениями...
Огромный выигрыш получится только 31 января в 23:59:59
Re: Нужен оптимальный алгоритм RTC
Мой код упрощается до этого:
С инкрементом
Код: Выделить всё
clr r17 ; r17 <- 0
lds r16,clk_ss ; грузим секунды
cpi r16,59 ; сравниваем
rol r17 ; r17 <- C
add r16,r17 ; Если не перевалило - r16 увеличится на 1
neg r17 ; r17 = 0-r17
and r16,r17 ; Маску на r16
sts clk_ss,r16 ; Пишем его
clr r17 ; r17 <- 0
lds r16,clk_mm ; грузим минуты
. . . . . . . .
Код: Выделить всё
clr r17 ; r17 <- 0
lds r16,clk_ss ; грузим секунды
inc r16 ; увеличиваем их
cpi r16,60 ; сравниваем. Если r16<60 устанавливается флаг C
rol r17 ; r17 <- C (C двинется в младший бит r17)
neg r17 ; r17=0-r17 (Если C был 1 результат будет 0 иначе FF)
and r16,r17 ; маску на r16 (Если C был 0 то и r16 обнулится)
sts clk_ss,r16 ; сохраняем его
Re: Нужен оптимальный алгоритм RTC
Мяу всем..
А что касается практики, то всё зависит от конкретной задачи..
У мя были два проекта, которые получилось реализовать на полностью линейном алгоритме..
В других случаях оптимальнее - комбинировать оба метода..
Линейную реализацию мя применяю для управления устройствами, где есть на входе некоторые входные воздействия и необходимо в реальном времени управлять выходными сигналами..
Но не по принципу ПЗУ, когда адрес сменился и сменился выход, а на основании обработки текущего состояния системы, предыдущего состояния, пред-предыдущего и почти любой степени вложенности..
Это и был пример решения выдернутого из контекста куска программы, без учёта самой программы и общей задачи..Мастер Ломастер писал(а):оно того стоит? как этюд - достойно, но на практике?
А что касается практики, то всё зависит от конкретной задачи..
У мя были два проекта, которые получилось реализовать на полностью линейном алгоритме..
В других случаях оптимальнее - комбинировать оба метода..
Линейную реализацию мя применяю для управления устройствами, где есть на входе некоторые входные воздействия и необходимо в реальном времени управлять выходными сигналами..
Но не по принципу ПЗУ, когда адрес сменился и сменился выход, а на основании обработки текущего состояния системы, предыдущего состояния, пред-предыдущего и почти любой степени вложенности..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Re: Нужен оптимальный алгоритм RTC
ploop писал(а):Мой код упрощается до этого:
Приветствую, пушистый..ploop писал(а):С инкрементом
Мя чую те понравилось "разминать мозги" линейными алгоритмами..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Re: Нужен оптимальный алгоритм RTC
Вот за это я и люблю ассемблер
Во-первых, мозгам засохнуть не даёт, во-вторых - любой код так допилить можно, что потом сам диву даёшься.
Если требуется дальнейшая поддержка, частые переделки алгоритма и прочее, наверное Си равных нет... но мне пока без надобности...
Во-первых, мозгам засохнуть не даёт, во-вторых - любой код так допилить можно, что потом сам диву даёшься.
Если требуется дальнейшая поддержка, частые переделки алгоритма и прочее, наверное Си равных нет... но мне пока без надобности...
Re: Нужен оптимальный алгоритм RTC
По части "написать на Си кривой алгоритм, а потом часто переделывать"? Наверной - да..ploop писал(а):частые переделки алгоритма и прочее, наверное Си равных нет.
Мя тоже ассемблера хватает и алгоритм единожды написанный не переделываю..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Re: Нужен оптимальный алгоритм RTC
Не могу полностью согласиться. На Си, конечно, пис`ать быстрее, но и на нем можно сгородить такую конструкцию, что восемь мудрецов не разберутся. А если на ассемблере не лениться и хорошо, а не скупо комментировать как весь алгоритм в целом, так и каждый значимый кусок ( я по возможности, работая на заказ, старался себя к этому принуждать ), то вопросов по сопровождению не будет, если профи. А еще в сопроводиловке к проге давать схемы алгоритмов. Занятие нудное, но полезное.ploop писал(а): Если требуется дальнейшая поддержка, частые переделки алгоритма и прочее, наверное Си равных нет... но мне пока без надобности...
Иногда меня посещала "гениальная", но может быть, неочевидная идея, давашая ощутимый эффект, я не ленился подробно расписывать, что мы тут достигаем и каким путем. Очень полезно бывало после отпуска и самому : "И какой идиот такую хрень накорячил ?! ... А, ну тогда -- совсем другое дело !"
Так что "понимабельность" программ -- это не совсем вопрос выбранной среды, а скорее культуры программирования.
Re: Нужен оптимальный алгоритм RTC
Я практически всегда комментирую свои исходники как в примере выше, опуская лишь самые очевидные моменты (типа inc r16 ; увеличиваем r16). Во-первых, во время комментирования собираешься с мыслями, и иногда приходят в голову новые идеи, во-вторых самому приятно читать код через некоторое время, в третьих - не задумываясь можно скопипастить кусок на форум или дать кому-то целиком, знаешь, что он в порядке.
Асма это особенно касается, там даже над элементарным алгоритмом придётся задумываться, если код чужой и без комментов.
Асма это особенно касается, там даже над элементарным алгоритмом придётся задумываться, если код чужой и без комментов.
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Нужен оптимальный алгоритм RTC
Нравятся мне такие задачки
Чуть короче и без использования бита T
PS: а каменты всегда пишу на на английском, т.к. в процессе творчества влом переключать раскладку 
Чуть короче и без использования бита T
Код: Выделить всё
CLR r17 ;r17=0
MOV r16,TS ;load SEC
INC R16 ;+SEC
CPI r16,60 ;<60 ?
SBC R17,ZERO ;IF LESS ->MASK=0xFF
AND R16,R17 ;AND MASK
MOV TS, r16 ;Save SEC
COM R17 ;1) IF MASK=0 ->MASK=1
ANDI R17,0x01 ;2) IF MASK=FF -> MASK=0
MOV R16,TM ;load MIN
ADD R16,R17 ;MIN=MIN+MASK
CLR R17 ;R17=0
CPI r16,60 ;<60
SBC R17,ZERO ;
AND R16,R17
MOV TM, r16
COM R17
ANDI R17,0x01
MOV R16,TH
ADD R16,R17
CLR R17
CPI r16,24
SBC R17,ZERO
AND R16,R17
MOV TH, r16
Re: Нужен оптимальный алгоритм RTC
Во.. нашего полку "прямоалгоритмикоффф" - прибыло..Engineer_Keen писал(а):Нравятся мне такие задачки
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Нужен оптимальный алгоритм RTC
я сразу отметил достоинство этого "прямого" алгоритма - фиксированная длительность исполнения, не зависящая от текущего состояния счетчиков. однако, требуется такая особенность довольно редко, т.е. это скорее экзотика. для часов - однозначно экзотика. а вот для понимания - это уже усложнение. если сложность понимания не компенсируется суровой необходимостью - я такого не понимаю.
битва с дураками проиграна, победители торжествуют. слава победителям!


