Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 25.12.2019, 17:36   #1
GoshaGrek
Senior Member
 
Регистрация: 29.09.2011
Сообщений: 288
Вес репутации: 357/37
GoshaGrek is just really niceGoshaGrek is just really niceGoshaGrek is just really niceGoshaGrek is just really nice
По умолчанию определение переменных, MPASM, PIC16F505

доброго времени суток! Есть такой вопрос,нужна консультация знатоков.
Вообщем возникла необходимость немного доработать проект, сделанный другим автором еще лет 15 назад
Исходник на АСМе написан под 16F505. Я от ассемблера отошел уже годков 6-7 как, да и вообще программирую микроконтроллеры сейчас далеко не каждый день(селяви). Поэтому возникли вопросы. С распределением переменных.
В исходном проекте переменных было 16 или 17,которые есс-но влезали в один банк и определялись через cblock.
При доработке надо добавить несколько фрагментов кода + еще 7-8 переменных.
Я так понимаю, что кроме вписывания везде перед обращением к переменной banksel других вариантов нет?
А определять пофиг как - хоть через UDATA, EQU, CBLOCK - все равно banksel нужен, или как ?
GoshaGrek вне форума   Ответить с цитированием
Старый 25.12.2019, 18:14   #2
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 7,017
Вес репутации: 6060/179
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: определение переменных, MPASM, PIC16F505

Цитата:
Сообщение от GoshaGrek Посмотреть сообщение
Я так понимаю, что кроме вписывания везде перед обращением к переменной banksel других вариантов нет?
А определять пофиг как - хоть через UDATA, EQU, CBLOCK - все равно banksel нужен, или как ?
если переменные из одного банка, нужен один банксел на какую-нибудь из них.
просто так везде ставить - места не хватит...
Greg вне форума   Ответить с цитированием
Старый 25.12.2019, 19:30   #3
GoshaGrek
Senior Member
 
Регистрация: 29.09.2011
Сообщений: 288
Вес репутации: 357/37
GoshaGrek is just really niceGoshaGrek is just really niceGoshaGrek is just really niceGoshaGrek is just really nice
По умолчанию Re: определение переменных, MPASM, PIC16F505

Цитата:
Сообщение от Greg Посмотреть сообщение
если переменные из одного банка, нужен один банксел на какую-нибудь из них.
просто так везде ставить - места не хватит...
Спасибо/ Про banksel понял. Я это и имел ввиду.
Я так понимаю ,Что сделать что то типа такого

Код:
_data_bank_0  UDATA  0x10
   var1_1   RES 1
;--------------
;--------------
   var1_16  RES 1

_data_bank_1  UDATA  0x30
   var2_1   RES 1
;--------------
;--------------
   var2_16  RES 1


MainLoop
   banksel var1_1
   movlw  0x01 
   movwf  var1_1
;-------------
   banksel var2_1
   movlw  0x02
   movwf  var2_1
   movlw  0x03
   addwf  var2_2
   goto   MainLoop
GoshaGrek вне форума   Ответить с цитированием
Старый 25.12.2019, 19:50   #4
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 7,017
Вес репутации: 6060/179
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: определение переменных, MPASM, PIC16F505

Цитата:
Сообщение от GoshaGrek Посмотреть сообщение
Спасибо/ Про banksel понял. Я это и имел ввиду.
Я так понимаю ,Что сделать что то типа такого

Код:
_data_bank_0  UDATA  0x10
   var1_1   RES 1
;--------------
;--------------
   var1_16  RES 1

_data_bank_1  UDATA  0x30
   var2_1   RES 1
;--------------
;--------------
   var2_16  RES 1


MainLoop
   banksel var1_1
   movlw  0x01 
   movwf  var1_1
;-------------
   banksel var2_1
   movlw  0x02
   movwf  var2_1
   movlw  0x03
   addwf  var2_2
   goto   MainLoop
ну да.
ещё чтобы сэкономить место на переключениях можно работать через индексный регистр.
как-бы не впасть опять в детство, что-то в этих самых примитивных зверьках было...
Greg вне форума   Ответить с цитированием
Старый 25.12.2019, 21:31   #5
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,092
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: определение переменных, MPASM, PIC16F505

Цитата:
Сообщение от GoshaGrek Посмотреть сообщение
Спасибо/ Про banksel понял. Я это и имел ввиду.
Я так понимаю...
Боюсь, что Ваш вопрос носил крайне синтетический характер и не имеет никакого отношения к реальным задачам.
Дело в том, что в реальных приложениях нет большого количества отдельных переменных. Есть некое их весьма ограниченное количество, которое к тому же обычно еще и разделяют на расположение в одном банке и расшаренную во все банки память. Для чего последние объявляют директивой udata_shr. То есть наиболее часто используемые размещают именно в этот сегмент и они не требуют никакого переключения банков.
Основные же объемы ОЗУ занимают МАССИВЫ, к которым обращаются, как правильно отметил Грег, через пару косвенной адресации FSR/INDF, а в этом случает нет никаких банков. Есть только двухбайтный адрес в FSR.
Марк вне форума   Ответить с цитированием
Старый 26.12.2019, 13:39   #6
SergP01
Senior Member
 
Аватар для SergP01
 
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 1,472
Вес репутации: 725/49
SergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to behold
По умолчанию Re: определение переменных, MPASM, PIC16F505

Цитата:
Сообщение от GoshaGrek Посмотреть сообщение
доброго времени суток! Есть такой вопрос,нужна консультация знатоков.
Вообщем возникла необходимость немного доработать проект, сделанный другим автором еще лет 15 назад
Исходник на АСМе написан под 16F505. Я от ассемблера отошел уже годков 6-7 как,
ИМХО, я бы уточнил задачу- чего эта железка должна делать... и написал бы, с нуля, свой проект на С.
и тогда ..дцать страниц кода на 2 влезет...
разбираться в чужом коде, да ещё на ASM - врагу не пожелаешь.
SergP01 вне форума   Ответить с цитированием
Старый 27.12.2019, 12:39   #7
GoshaGrek
Senior Member
 
Регистрация: 29.09.2011
Сообщений: 288
Вес репутации: 357/37
GoshaGrek is just really niceGoshaGrek is just really niceGoshaGrek is just really niceGoshaGrek is just really nice
По умолчанию Re: определение переменных, MPASM, PIC16F505

Цитата:
Сообщение от Марк Посмотреть сообщение
Боюсь, что Ваш вопрос носил крайне синтетический характер и не имеет никакого отношения к реальным задачам.
Дело в том, что в реальных приложениях нет большого количества отдельных переменных. Есть некое их весьма ограниченное количество.....
Да ну...Почему ж не имеет.
Все очень просто - контроллер на плате управления электроавтоматикой небольшого станка. Прошу прощения что не так написал в первом посте - кпмень 506 а не 505 - просто при наборе не в ту цифру ткнул. Но не суть. 6 входов - 2 кнопки + 3 еще датчики + задатчик на ацп. 4 выхода - на одном из них программный типа шим. Логика программы по времени привязана к таймеру ТMR0. Почему не может быть много переменных? Было 16 в исходнике. Надо по логике добавить еще около пяти. В этом чипе всего 67 байт. Разбитых по даташиту на 4 банка.
Один заполнен под завязку.
GoshaGrek вне форума   Ответить с цитированием
Старый 27.12.2019, 13:10   #8
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,092
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: определение переменных, MPASM, PIC16F505

Цитата:
Сообщение от GoshaGrek Посмотреть сообщение
6 входов - 2 кнопки + 3 еще датчики + задатчик на ацп. 4 выхода - на одном из них программный типа шим. Логика программы по времени привязана к таймеру ТMR0. Почему не может быть много переменных? Было 16 в исходнике. Надо по логике добавить еще около пяти. В этом чипе всего 67 байт. Разбитых по даташиту на 4 банка.
Один заполнен под завязку.
В этом МК есть 3 байта расшаренной памяти и по 16 в каждом банке.
То есть 19 регистров ОЗУ не требуют никакого переключения из нулевого банка. Таким образом, достаточно выделить для одной задачи место в первом банке и однократно переключить на него при входе в эту задачу.
Главное, не использовать в одном вызове разные банки и переключение не будет систематически съедать производительность.
И это я еще не говорю про повторное использование памяти, когда нет необходимости хранить переменные при выходе из задачи (по сути это локальные переменные).
А вообще, странный выбор МК для описанной выше задачи... Может стоит его заменить на что нибудь более удобное?
Марк вне форума   Ответить с цитированием
Старый 27.12.2019, 14:19   #9
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,092
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: определение переменных, MPASM, PIC16F505

В догон намекну, что более удобным будет пин2пин совместимый PIC16F1503. Он совместим с точностью до маппирования периферии.
Марк вне форума   Ответить с цитированием
Старый 27.12.2019, 16:04   #10
GoshaGrek
Senior Member
 
Регистрация: 29.09.2011
Сообщений: 288
Вес репутации: 357/37
GoshaGrek is just really niceGoshaGrek is just really niceGoshaGrek is just really niceGoshaGrek is just really nice
По умолчанию Re: определение переменных, MPASM, PIC16F505

Цитата:
Сообщение от Марк Посмотреть сообщение
В догон намекну, что более удобным будет пин2пин совместимый PIC16F1503. Он совместим с точностью до маппирования периферии.
Спасибо за советы...
Может и стоит(ло) бы выбрать что то другое... году примерно в 2004 . Когда делали совсем другие люди это оборудование. Причем не в одном экземпляре. А в 10 как минимум.
А сейчас просто стоит задача немного модифицировать. Вот и разбираюсь с программой. Написанной совсем другим автором фиг знает сколько лет назад. При чем судя по стилю написания у этого чела над кроватью портрет Корабельникова висит.
И кстати, есть мысли заменить этот проц на 684 или на 1823 , про 1503 не подумал - а тоже вариант)
GoshaGrek вне форума   Ответить с цитированием
Старый 27.12.2019, 16:10   #11
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,092
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: определение переменных, MPASM, PIC16F505

1503-ий, во первых, дешев, а во вторых даже 2 CLC ячейки имеет, что для Вашего применения может оказаться крайне полезным.
И еще один момент. Наличие в 1503-м готовой периферии и системы прерываний приведет к резкому упрощению структуры алгоритма, повышению читабельности кода и его масштабируемости под иные задачи.
Есть прямой резон ПЕРЕПИСАТЬ ЗАНОВО под другой МК, а не заниматься мазохизмом.

Последний раз редактировалось Марк; 27.12.2019 в 16:16.
Марк вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 08:56.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot