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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Для чего нужны банки ?
evilroman
сообщение Apr 11 2008, 15:12
Сообщение #1


Участник
*

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



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


Участник
*

Группа: Новичок
Сообщений: 57
Регистрация: 14-03-08
Пользователь №: 35 904



Цитата(evilroman @ Apr 11 2008, 19:12) *
зачем блин эти банки нужны?


Чтоб увеличить адресуемое пространство наверно.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Apr 11 2008, 15:32
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



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


imxo, тяжелое наследие прошлого. Начинали с немного памяти, оказалось, что аддресуемое пространство не лезит в 14 бит комманды


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
dac
сообщение Apr 11 2008, 17:45
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



Цитата(evilroman @ Apr 11 2008, 19:12) *
Дно грызня с банками конечно уже надоела порядочно - то забудишь сохранить банк при уходе на прерывание, то между командами приходится вставлять переключение на нужный банк, потом наооборот....

зачем нужны уже объяснили, а что б не мучиться переходите на С. компилятор все сделает smile.gif
Go to the top of the page
 
+Quote Post
ZLOI
сообщение Apr 29 2008, 07:56
Сообщение #5


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

Группа: Участник
Сообщений: 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
Сообщение #6


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

Группа: Свой
Сообщений: 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
Сообщение #7


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

Группа: Участник
Сообщений: 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
Сообщение #8





Группа: Новичок
Сообщений: 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
Сообщение #9


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

Группа: Участник
Сообщений: 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
GVC
сообщение May 7 2008, 17:02
Сообщение #10


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

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



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

beer.gif beer.gif именно это я и подразумерал, так как в небольших проектах основная масса операций происходит с SFR регистрами, а они доступны из любого банка. wink.gif
А у 18х пиков младших моделей(самые ходовые если надо 8-бит и есть не очень ёмкая задача) например 18F1320 вообще вся озу в Access RAM.

Сообщение отредактировал GVC - May 7 2008, 17:05


--------------------
2b || !2b = ?
--------------------
Go to the top of the page
 
+Quote Post
=GM=
сообщение May 8 2008, 11:42
Сообщение #11


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
Сообщение #12


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

Группа: Участник
Сообщений: 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
=GM=
сообщение May 9 2008, 09:56
Сообщение #13


Ambidexter
*****

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



Цитата(ZLOI @ May 9 2008, 02:27) *
Ну тогда тактовую на пик надо поставить 48 МГц, чтобы уж совсем честно

Эт зачем ещё? По-честному, вроде бы надо уравнивать тактовые частоты, чтобы было одинаковое потребление по-мощности, поскольку мощность в кмопах линейно растёт с частотой. Однако не уверен, что тактовая 40 МГц работает во всём пике, как 20 МГц в аврке. Думается, что разработчики пиков просто используют 4 фазы в разных частях ядра. Короче, сложный вопрос, какую частоту лучше использовать для сопоставимых результатов.
Цитата(ZLOI @ May 9 2008, 02:27) *
А ничего, что они в разных банках?

Как раз для команды movff ничего. Думаю, вам не мешало бы взглянуть на команду movff по-пристальней.
Цитата(ZLOI @ May 9 2008, 02:27) *
Думаю уместно было бы сказать про косвенную адресацию. Вот здесь явные преимущества

Какие ж там преимущества? Вот такой же код для авр
Код
   ldi   zh,high(table*2)
   ldi   zl,low(table*2)
   clr   temp
loop:
   st    z+,temp
   cpi   zh,high(eotable*2)
   brne  loop

Хоть по циклам одно и то же, но в коде для пика один недостаток: адресуемая память не более 4096 минус отмапленные на память адреса регистров периферии и ядра. А у авр до 64Кбайт можно и больше, всё по-честному. Впрочем в пиках, наверное, принципиально не может быть больше 4Кбайт озу, надо уточнить.

Да, посмотрел. Во всех 18-х пиках озу не более 3968 байт.


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


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

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



Цитата(=GM= @ May 9 2008, 18:56) *
Эт зачем ещё? По-честному, вроде бы надо уравнивать тактовые частоты, чтобы было одинаковое потребление по-мощности, поскольку мощность в кмопах линейно растёт с частотой. Однако не уверен, что тактовая 40 МГц работает во всём пике, как 20 МГц в аврке. Думается, что разработчики пиков просто используют 4 фазы в разных частях ядра.

48 Это максимальная рабочая частота, заявленная разработчиками, судя по ДШ.
Цитата(=GM= @ May 9 2008, 18:56) *
Короче, сложный вопрос, какую частоту лучше использовать для сопоставимых результатов.

Согласен.
Цитата(=GM= @ May 9 2008, 18:56) *
Как раз для команды movff ничего. Думаю, вам не мешало бы взглянуть на команду movff по-пристальней.

Да, извиняюсь я был не прав. С 18ми я тоже не работал, но поскольку Промэлектроника не включила мосты от фтди в счёт, то видимо придётся делать общение с усб на пике. Вот и познакомимся заодно.
Цитата(=GM= @ May 9 2008, 18:56) *
Какие ж там преимущества? Вот такой же код для авр
Код
   ldi   zh,high(table*2)
   ldi   zl,low(table*2)
   clr   temp
loop:
   st    z+,temp
   cpi   zh,high(eotable*2)
   brne  loop

Хоть по циклам одно и то же, но в коде для пика один недостаток: адресуемая память не более 4096 минус отмапленные на память адреса регистров периферии и ядра. А у авр до 64Кбайт можно и больше, всё по-честному. Впрочем в пиках, наверное, принципиально не может быть больше 4Кбайт озу, надо уточнить.
Да, посмотрел. Во всех 18-х пиках озу не более 3968 байт.

Спасибо за информацию, было интересно.

Кстати, сейчас наверное вообще глупо 8 битными заниматься, когда какой-нибудь AT32AP7000 стоит 350 р, примерно за столько же я купил 18й. И разговора о банках вообще не будет.
Go to the top of the page
 
+Quote Post
=GM=
сообщение May 9 2008, 12:11
Сообщение #15


Ambidexter
*****

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



Цитата(ZLOI @ May 9 2008, 09:35) *
48 Это максимальная рабочая частота, заявленная разработчиками, судя по ДШ

Пики18 уже и с тактовой 64 МГц есть (с внутренней плл). Но тогда можно упомянуть и аврки с тактовой 48 МГц, есть такие (там, кстати, юсб есть). И что такое будет представлять из себя мелкий 18-й пик с 16 мипсами по сравнению с авр с 48 мипсами? Сопли и вопли (:-). Да он даже 20-мипсовой авр проиграет.

Цитата(ZLOI @ May 9 2008, 09:35) *
Кстати, сейчас наверное вообще глупо 8 битными заниматься, когда какой-нибудь AT32AP7000 стоит 350 р, примерно за столько же я купил 18й. И разговора о банках вообще не будет

Ничего себе! 15 вечнозелёных! Да за 5у.е. можно купить TMS320F2808 какой-нибудь, 100 мипсов, периферии до чёрта, ацп 12.5 Мвыборок/с и т.д. А применение 8-ми битников, как всегда, зависит от задачи и весьма. Кстати вот из моего скромного опыта, у меня стоит 2808 и у него в помощниках планируется pic18f45k20 (пока используется j10, но нужна температура -40..+125). Дсп загружен полностью основной задачей, а пик помогает разгрести входные сигналы от датчиков коленвала и грм. Задача не сложная, но нудная, да ещё надо предсказывать положение некоторых импульсов. Пик был выбран из учета работы на 20 МГц тактовой на 3.3 вольтах питания плюс толерантность некоторых портов к 5.5В при питании 3.3. Так что, задача рулит, и заниматься 8-ми битниками не зазорно.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:06
Рейтинг@Mail.ru


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