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

 
 
> Для чего нужны банки ?
evilroman
сообщение Apr 11 2008, 15:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-06-07
Пользователь №: 28 635



Добрый день всем!
Вот недавно начал грызть пики, начал соответственно с 16F624. Впринципе, пока всё устраивает, но грызня с банками конечно уже надоела порядочно - то забудишь сохранить банк при уходе на прерывание, то между командами приходится вставлять переключение на нужный банк, потом наооборот.... думаю знакомо всем. Единственное, до сих пор не могу понять, кто , и , главное , зачем их придумал. Ведь адреса регистров указываем , как мне кажется, явно. Может кто подскажет, зачем блин эти банки нужны?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ZLOI
сообщение Apr 29 2008, 07:56
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-03-07
Из: Славный город Шелехов
Пользователь №: 25 967



Цитата(evilroman @ Apr 12 2008, 00:12) *
Добрый день всем!
Вот недавно начал грызть пики, начал соответственно с 16F624. Впринципе, пока всё устраивает, но грызня с банками конечно уже надоела порядочно - то забудишь сохранить банк при уходе на прерывание, то между командами приходится вставлять переключение на нужный банк, потом наооборот.... думаю знакомо всем. Единственное, до сих пор не могу понять, кто , и , главное , зачем их придумал. Ведь адреса регистров указываем , как мне кажется, явно. Может кто подскажет, зачем блин эти банки нужны?

Их давно начали разрабатывать, хотя это уже сказали. Если Вам не нравятся банки, то из 8 битных можете AVR попробывать, там адресное линейно.
Go to the top of the page
 
+Quote Post
GVC
сообщение Apr 29 2008, 10:02
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 91
Регистрация: 13-07-07
Из: Украина, Днепропетровск
Пользователь №: 29 095



Цитата(ZLOI @ Apr 29 2008, 10:56) *
Их давно начали разрабатывать, хотя это уже сказали. Если Вам не нравятся банки, то из 8 битных можете AVR попробывать, там адресное линейно.


В 18х пикаж и выше уже ненадо заморачиватся с банками, даже на асемблере wink.gif


--------------------
2b || !2b = ?
--------------------
Go to the top of the page
 
+Quote Post
ZLOI
сообщение May 5 2008, 13:40
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-03-07
Из: Славный город Шелехов
Пользователь №: 25 967



Цитата(GVC @ Apr 29 2008, 19:02) *
В 18х пикаж и выше уже ненадо заморачиватся с банками, даже на асемблере wink.gif

Можно фрагмент кода для 18 пика на ассемблере записи 1 в переменную по адресу 2FF, а после этого 1 в переменую по адресу 1FF?
Go to the top of the page
 
+Quote Post
Vanizma
сообщение May 7 2008, 05:12
Сообщение #5





Группа: Новичок
Сообщений: 12
Регистрация: 4-05-08
Из: Pskov
Пользователь №: 37 266



Цитата(ZLOI @ May 5 2008, 17:40) *
Можно фрагмент кода для 18 пика на ассемблере записи 1 в переменную по адресу 2FF, а после этого 1 в переменую по адресу 1FF?


Код
#include    p18f252.inc
    org    0x0
    bra    start

    org    0x30    
start:
    movlw    0xff
    movwf    FSR0L,ACCESS
    movlw    0x2
    movwf    FSR0H,ACCESS
    movlw    0x1
    movwf    INDF0,ACCESS
    movlw    0x1
    movwf    FSR0H,ACCESS
    movlw    0x1    
    movwf    INDF0,ACCESS    
    bra    $
    end

biggrin.gif
Но здесь речь, я думаю, о другом. В пиках 18-х все регистры спец. функций SFR (и байтисы до 0x07f) находятся в области ACCESS RAM, и не надо париться переключая банки при использовании SFR регистров. А добавить <,ACCESS> не так думаю и сложно.
А использовать остальную память можно и косвенно через FSR'ы, особенно если нужно забивать строки данных.
Go to the top of the page
 
+Quote Post
ZLOI
сообщение May 7 2008, 07:56
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-03-07
Из: Славный город Шелехов
Пользователь №: 25 967



Цитата(Vanizma @ May 7 2008, 14:12) *
biggrin.gif
Но здесь речь, я думаю, о другом. В пиках 18-х все регистры спец. функций SFR (и байтисы до 0x07f) находятся в области ACCESS RAM, и не надо париться переключая банки при использовании SFR регистров. А добавить <,ACCESS> не так думаю и сложно.
А использовать остальную память можно и косвенно через FSR'ы, особенно если нужно забивать строки данных.

Да я понимаю, что это одназначно круче чем в 16х, но всё таки это
Цитата
заморачиватся с банками, даже на асемблере


Про старшие пики говорить не буду, потому что они уже не 8 битные.

Залез в ДШ на атмегу и напрашивается следующий код для такой задачи:
Код
LDI Register,1
ST 01FFh,Register
ST 02FFh,Register

Здесь и инструкций меньше и выполняются они за 2 такта, не считая первой, которая за 1.
У пиков они по 4 каждая. Т.е. 40 тактов у пиков против 5 у атмеги.

Поэтому и посоветовал попробывать человеку, может понравиться. Я тоже буду пробывать скоро.

P.S.
Атмеги ещё не программировал, так что не пинайте, если что не правильно написал.
Go to the top of the page
 
+Quote Post
=GM=
сообщение May 8 2008, 11:42
Сообщение #7


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(ZLOI @ May 7 2008, 06:56) *
Залез в ДШ на атмегу и напрашивается следующий код для такой задачи:
Код
   ldi   temp,1
   sts   0x1FF,temp
   sts   0x2FF,temp

Здесь и инструкций меньше и выполняются они за 2 такта, не считая первой, которая за 1.
У пиков они по 4 каждая. Т.е. 40 тактов у пиков против 5 у атмеги

Ну положим, (для справедливости, хотя я не любитель пиков), что разница составляет 4 раза, а не 8, как у вас. И команда должна быть sts, а не st. А вместо тактов, лучше использовать понятие машинный цикл (МЦ). Для авр 1МЦ=50 нс для максимальной тактовой частоты 20 МГц, а для пиков 1МЦ=100 нс для максимальной тактовой 40 МГц.

Для 18 пички можно так
Код
   movlw   1
   movwf   temp
   movff   temp,0x1FF
   movff   temp,0x2FF


Код выполняется за 6МЦ=0.6uс и занимает 6 слов программной памяти. Код для аврки выполняется за 5МЦ=0.25uс и занимает 5 слов. Вроде бы код быстрее в два раза и покомпактнее. Но вот на пересылке из памяти в память при равной скорости пересылки авр проигрывает пику18 по компактности кода
Код
для пик 2 слова
   movff   0x1FF,0x2FF ;2МЦ

для авр 4 слова и ещё регистр
   lds   temp,0x1FF ;2МЦ
   sts   0x2FF,temp ;2МЦ


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
ZLOI
сообщение May 9 2008, 03:27
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 7-03-07
Из: Славный город Шелехов
Пользователь №: 25 967



Цитата(=GM= @ May 8 2008, 20:42) *
Ну положим, (для справедливости, хотя я не любитель пиков), что разница составляет 4 раза, а не 8, как у вас. И команда должна быть sts, а не st. А вместо тактов, лучше использовать понятие машинный цикл (МЦ). Для авр 1МЦ=50 нс для максимальной тактовой частоты 20 МГц, а для пиков 1МЦ=100 нс для максимальной тактовой 40 МГц.

Ну тогда татовую на пик надо поставить 48 МГц, чтобы уж совсем честно.
Цитата(=GM= @ May 8 2008, 20:42) *
Для 18 пички можно так
Код
   movlw   1
   movwf   temp
   movff   temp,0x1FF
   movff   temp,0x2FF

А ничего, что они в разных банках?
Цитата(=GM= @ May 8 2008, 20:42) *
Код выполняется за 6МЦ=0.6uс и занимает 6 слов программной памяти. Код для аврки выполняется за 5МЦ=0.25uс и занимает 5 слов. Вроде бы код быстрее в два раза и покомпактнее. Но вот на пересылке из памяти в память при равной скорости пересылки авр проигрывает пику18 по компактности кода
Код
для пик 2 слова
   movff   0x1FF,0x2FF;2МЦ
[b]ОНИ В РАЗНЫХ БАНКАХ[/b]
для авр 4 слова и ещё регистр
   lds   temp,0x1FF;2МЦ
   sts   0x2FF,temp;2МЦ

Думаю уместно было бы сказать про косвенную адресацию:
Цитата
LFSR FSR0, 100h
NEXT: CLRF POSTINC0
BTFSS FSR0H, 1
BRA NEXT

Вот здесь явные преимущества.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 18th August 2025 - 06:56
Рейтинг@Mail.ru


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