Ассемблерный сдвиг
23.08.2012, 09:03
|
|
|
Временная регистрация
Регистрация: 16.01.2007
Адрес: Казахстан
Сообщений: 73
Сказал спасибо: 18
Сказали Спасибо 61 раз(а) в 18 сообщении(ях)
|
Re: Ассемблерный сдвиг
Сообщение от nonamedov
|
Ну, и где же тут:
|
Код:
|
if (Buf[i+1] & 0x80)Buf[i] |= 1; |
|
Вы были правы.
|
Цитата:
|
asm volatile (
"ldi R30,lo8(Buf+384) \n"
"ldi R31,hi8(Buf+384) \n"
"ldi R19,128 \n"
"ldi R20,2 \n"
"Cycle: \n"
"ld R25,-Z \n"
"rol R25 \n"
"st Z,R25 \n"
"dec r19 \n"
"brne Cycle \n"
"dec r20 \n"
"brne Cycle \n"
);
|
|
Цитата:
|
for(i=0;i‹Modules*32;i++)
{
Buf[i] ‹‹= 1;
if (Buf[i+1] & 0x80)Buf[i] |= 1;
}
|
Кварц 16Мгц
АСМ циклы 3081: время 192.58мкс
Си циклы 17257: время 1078мкс
Вот так вот.
Кто может посказать как переать конец буфера(Buf) не таким образом:
"ldi R30,lo8(Buf+384) \n"
"ldi R31,hi8(Buf+384) \n"
А как нибудь так:
#define Modules 12 Количество LED модулей
Buf[Modules*32] На каждый модуль по 32 байта видеобуффура
Спасибо.
Последний раз редактировалось serj_neo; 23.08.2012 в 11:25.
|
|
|
|
23.08.2012, 10:45
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: Ассемблерный сдвиг
Зачем мудрить, можно и так:
Сообщение от serj_neo
|
"ldi R30,lo8(Buf+Modules*12) \n"
"ldi R31,hi8(Buf+Modules*12) \n"
|
,в чем смысл? Лучше напишите нормальные комментарии.
|
|
|
|
23.08.2012, 11:33
|
|
|
Временная регистрация
Регистрация: 16.01.2007
Адрес: Казахстан
Сообщений: 73
Сказал спасибо: 18
Сказали Спасибо 61 раз(а) в 18 сообщении(ях)
|
Re: Ассемблерный сдвиг
Сообщение от nonamedov
|
Зачем мудрить, можно и так:
|
Цитата:
|
Сообщение от serj_neo
"ldi R30,lo8(Buf+Modules*12) \n"
"ldi R31,hi8(Buf+Modules*12) \n"
|
,в чем смысл? Лучше напишите нормальные комментарии.
|
Так не компилируется. Modules(количество ЛЕД панелей)*32(Каждой по 32 байта в ОЗУ)
У меня обьявлен дефайн #define Modules 12
То есть имею 12 модулей ЛЕД.
В программе Кругом и везде применяю "Modules" кроме асм вставки.
Вот и хотелось там тоже применить чтоб при компиляции только в одном месте выбирать количество панелей.
Ну в общем уже всё проверил в железе. Всё работает как надо.
|
|
|
|
23.08.2012, 12:43
|
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Ассемблерный сдвиг
Надо бы расположить байты информации на экране не вдоль строк, а поперёк, по столбцам, типа 2 байта на столбец. Ну, пришлось бы переделать знакогенератор только. И всё, никаких сдвигов по битам. А сдвигать целыми байтами, что проще и логичнее для данного устройства бегущей строки ...
|
|
|
|
23.08.2012, 20:19
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Ассемблерный сдвиг
Сообщение от dosikus
|
|
Сдвиг проходит через CARRY - это подсказка.
|
Алексей, а что ты получишь из C, когда сдвинешь первый раз?
Вначале надо "задвинуть" в С тот бит, в сторону которого будет сдвиг, а в конце из С сохранить бит в крайний противоположный.
bst/bld - подсказка...
|
|
|
|
23.08.2012, 20:24
|
|
|
Гражданин KAZUS.RUN
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Ассемблерный сдвиг
omercury поворачиваем цикл наоборот и ничего "Вначале" двигать не надо.
|
|
|
|
23.08.2012, 21:33
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Ассемблерный сдвиг
Сообщение от Hives
|
|
omercury поворачиваем цикл наоборот и ничего "Вначале" двигать не надо.
|
Да ну?
|
|
|
|
23.08.2012, 21:39
|
|
|
Гражданин KAZUS.RUN
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Ассемблерный сдвиг
так смешно? ну объясни нам, глупым, вместе посмеемся.
|
|
|
|
23.08.2012, 21:56
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Ассемблерный сдвиг
Открываем ДШ на любой АВР и смотрим команды ROL и ROR

Что видим?
Регистр шириной 9 бит. Девятый - флаг переноса.
Сдвиг выполняется одновременно
(для ROL) То, что было в С сдвигается в нулевой бит регистра, весь регистр сдвигается влево (b1‹‹b0. b2‹‹b1 и т.д., а содержимое бита 7 сдвигается в флаг переноса. (Для ROR в обратную сторону.)
То бишь, не загрузив предварительно в флаг С старший бит из старшего байта массива, мы его потеряем. При сдвиге вправо, соответственно, надо загружать в флаг переноса младший бит младшего байта массива.
Ну и после последней команды сдвига в флаге переноса мы имеем последний бит из массива, который тоже неплохо бы сохранить, чтоб не потерять...
"Лопата"...
Последний раз редактировалось omercury; 23.08.2012 в 22:02.
|
|
|
|
23.08.2012, 22:03
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Ассемблерный сдвиг
Сообщение от omercury
|
Алексей, а что ты получишь из C, когда сдвинешь первый раз?
Вначале надо "задвинуть" в С тот бит, в сторону которого будет сдвиг, а в конце из С сохранить бит в крайний противоположный.
bst/bld - подсказка...
|
А это не само собой подразумевалось?
Или надо было разжевать все полностью?
Тогда не интересно , ни чего не запомнил бы ТС .
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Сдвиг фаз при помощи ЦОС
|
lexa1000 |
Цифровые сигнальные процессоры |
11 |
05.04.2013 15:12 |
|
Сдвиг в тестбэнче
|
Aleksashka1 |
Микроконтроллеры, АЦП, память и т.д |
1 |
17.01.2011 16:26 |
|
Выбор, включение, модуляция, сдвиг и выключение
|
majorka65 |
Микроконтроллеры, АЦП, память и т.д |
1 |
26.05.2010 19:34 |
|
Сдвиг сигнала, почему?
|
Gonchar |
Микроконтроллеры, АЦП, память и т.д |
11 |
24.05.2010 23:42 |
|
Как или чем определить фазовый сдвиг
|
Online |
Измерительное оборудование |
19 |
06.11.2006 15:12 |
Часовой пояс GMT +4, время: 04:43.
|
|