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

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

|
Добрый день всем! Вот недавно начал грызть пики, начал соответственно с 16F624. Впринципе, пока всё устраивает, но грызня с банками конечно уже надоела порядочно - то забудишь сохранить банк при уходе на прерывание, то между командами приходится вставлять переключение на нужный банк, потом наооборот.... думаю знакомо всем. Единственное, до сих пор не могу понять, кто , и , главное , зачем их придумал. Ведь адреса регистров указываем , как мне кажется, явно. Может кто подскажет, зачем блин эти банки нужны?
|
|
|
|
|
 |
Ответов
|
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 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 Вот здесь явные преимущества.
|
|
|
|
Сообщений в этой теме
evilroman Для чего нужны банки ? Apr 11 2008, 15:12 Abckur Цитата(evilroman @ Apr 11 2008, 19:12) за... Apr 11 2008, 15:27 A. Fig Lee Цитата(evilroman @ Apr 11 2008, 11:12) До... Apr 11 2008, 15:32 dac Цитата(evilroman @ Apr 11 2008, 19:12) Дн... Apr 11 2008, 17:45       =GM= Цитата(ZLOI @ May 9 2008, 02:27) Ну тогда... May 9 2008, 09:56        ZLOI Цитата(=GM= @ May 9 2008, 18:56) Эт зачем... May 9 2008, 10:35         =GM= Цитата(ZLOI @ May 9 2008, 09:35) 48 Это м... May 9 2008, 12:11          ZLOI Цитата(=GM= @ May 9 2008, 21:11) Так что,... May 9 2008, 13:18    GVC Цитата(Vanizma @ May 7 2008, 08:12) Но зд... May 7 2008, 17:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|