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


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


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

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

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


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

Можно фрагмент кода для 18 пика на ассемблере записи 1 в переменную по адресу 2FF, а после этого 1 в переменую по адресу 1FF?
Vanizma
Цитата(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'ы, особенно если нужно забивать строки данных.
ZLOI
Цитата(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.
Атмеги ещё не программировал, так что не пинайте, если что не правильно написал.
GVC
Цитата(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.
=GM=
Цитата(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МЦ
ZLOI
Цитата(=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

Вот здесь явные преимущества.
=GM=
Цитата(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 байт.
ZLOI
Цитата(=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й. И разговора о банках вообще не будет.
=GM=
Цитата(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-ми битниками не зазорно.
ZLOI
Цитата(=GM= @ May 9 2008, 21:11) *
Так что, задача рулит, и заниматься 8-ми битниками не зазорно.

+1. Приятно слышать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.