|
Для чего нужны банки ? |
|
|
|
Apr 11 2008, 15:12
|
Участник

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

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

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

|
Цитата(evilroman @ Apr 11 2008, 19:12)  зачем блин эти банки нужны? Чтоб увеличить адресуемое пространство наверно.
|
|
|
|
|
Apr 11 2008, 15:32
|

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

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

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

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

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

|
Цитата(ZLOI @ Apr 29 2008, 10:56)  Их давно начали разрабатывать, хотя это уже сказали. Если Вам не нравятся банки, то из 8 битных можете AVR попробывать, там адресное линейно. В 18х пикаж и выше уже ненадо заморачиватся с банками, даже на асемблере
--------------------
2b || !2b = ? --------------------
|
|
|
|
|
May 7 2008, 05:12
|
Группа: Новичок
Сообщений: 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 Но здесь речь, я думаю, о другом. В пиках 18-х все регистры спец. функций SFR (и байтисы до 0x07f) находятся в области ACCESS RAM, и не надо париться переключая банки при использовании SFR регистров. А добавить <,ACCESS> не так думаю и сложно. А использовать остальную память можно и косвенно через FSR'ы, особенно если нужно забивать строки данных.
|
|
|
|
|
May 7 2008, 07:56
|

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

|
Цитата(Vanizma @ May 7 2008, 14:12)  Но здесь речь, я думаю, о другом. В пиках 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. Атмеги ещё не программировал, так что не пинайте, если что не правильно написал.
|
|
|
|
|
May 7 2008, 17:02
|

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

|
Цитата(Vanizma @ May 7 2008, 08:12)  Но здесь речь, я думаю, о другом. В пиках 18-х все регистры спец. функций SFR (и байтисы до 0x07f) находятся в области ACCESS RAM, и не надо париться переключая банки при использовании SFR регистров. А добавить <,ACCESS> не так думаю и сложно. А использовать остальную память можно и косвенно через FSR'ы, особенно если нужно забивать строки данных.  именно это я и подразумерал, так как в небольших проектах основная масса операций происходит с SFR регистрами, а они доступны из любого банка.  А у 18х пиков младших моделей(самые ходовые если надо 8-бит и есть не очень ёмкая задача) например 18F1320 вообще вся озу в Access RAM.
Сообщение отредактировал GVC - May 7 2008, 17:05
--------------------
2b || !2b = ? --------------------
|
|
|
|
|
May 8 2008, 11:42
|

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МЦ
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
May 9 2008, 03:27
|

Частый гость
 
Группа: Участник
Сообщений: 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 Вот здесь явные преимущества.
|
|
|
|
|
May 9 2008, 09:56
|

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 байт.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
May 9 2008, 10:35
|

Частый гость
 
Группа: Участник
Сообщений: 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й. И разговора о банках вообще не будет.
|
|
|
|
|
May 9 2008, 12:11
|

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-ми битниками не зазорно.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|