24.05.2016, 21:47
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: WDT
Вот озадачили...
В даташит рекомендовано при входе в подпрограммуобработки прерываний:
Код:
|
movwf W_Copy
movfw STATUS
movwf Status_Copy
movfw FSR
movwf FSR_Copy ; по необходимости
movfw PCL
movwf PCL_Copy ; по необходимости |
но, в следствии замечаний tsb
Цитата:
|
если в момент вызова прерывания был включен какой либо банк
|
у меня вся уверенность в том, что раньше сочинялось, пропала. И по логике то ведь правильное замечание!
Это для сохранения аккумулятора, при резервировании скажем 0х70может "выпасть" любая "параллельная" ячейка, в зависимости от банка при входе, т.е. при выходе с неё же чтение / восстановление и произойдет?
70h - F0h - 17h - 1Fh.
accesses - асоциируется, я так понимаю, а как на самом деле происходит?
И можно / нужно ли в эти адреса помещать "рабочие" регистры: Temp, Cykl, Time ну и др, которые меняются в программе. Попробую по другому: дабы не тасовать банки, я как то резервировал пару-тройку регистров в первом, например, банке, в случае работы с TRIS. т.e. при входе в подпрограмму данные для записи, скажем 1-Wire, в акк; меняю банк, и movwf Temp, который в первом банке. Далее только bcf - bsf TRIS, при выходе банк 0.
Недостаток: или запретить прерывания, или разложить по времени процедуру вне их, скажем после смены разряда индикации, проверка установленного в обработке флага, его сброс и запись 1-Wire Data.
Это как бы мысли вслух. Как поступают великие Гуру?
Цитата:
|
Признайтесь, почему PIC16 а не ардуина?
|
Их есть у меня (не раз уже обсасывался этот вопрос, не каюсь!)
Вопрс: чему равен обьем шара?
Ответ: шара обьема не имеет!
__________________
Смотрящий под ноги - звёзды видит в лужах.
Последний раз редактировалось rusyvochka; 24.05.2016 в 21:56.
|
|
|
|
24.05.2016, 22:14
|
|
Гражданин KAZUS.RU
Регистрация: 13.04.2012
Адрес: Королёв МО
Сообщений: 786
Сказал спасибо: 621
Сказали Спасибо 364 раз(а) в 200 сообщении(ях)
|
Re: WDT
PCL при входе в прерывание сохранять не надо.
Он и так автоматически сохранить в Stack-е.
После сохранения WREG, STATUS-а и т.д. не забудьте переключиться в банк0, поскольку в прерывание вы можете попасть из любого банка.
И ещё:
Опасно у вас сделаны переходы по Count_B0.
После чтения его значения, перед addwf PCL, я бы поставил andlw 7.
И учтите, что это будет работать только если в результате сложения не будет перехода через 255.
|
|
|
|
24.05.2016, 22:23
|
|
Прописка
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
|
Re: WDT
Эх, вот как-то так я делал. Переменные для хранения предыдущего контекста как раз в тех банконезависимых адресах
Код:
|
;***** VARIABLE DEFINITIONS
INT_VAR UDATA_SHR
w_temp RES 1 ; variable used for context saving
status_temp RES 1 ; variable used for context saving
;************************************************* ********
INT_VECTOR CODE 0x0004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
banksel PIR1
btfsc PIR1,ADIF
call HandleADC
btfsc INTCON,RAIF
call HandleRotEnc
btfsc INTCON,T0IF
call HandleTMR0
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt |
Последний раз редактировалось cogen; 24.05.2016 в 23:23.
Причина: адрес таки в INT_VAR UDATA_SHR не указываем
|
|
|
|
24.05.2016, 22:35
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: WDT
Цитата:
|
не будет перехода через 255.
|
все время на контроле
Код:
|
INT_VAR UDATA_SHR 0x20
w_temp RES 1 ; variable used for context saving
status_temp RES 1 ; variable used for context saving |
ну и как то не улавливаю, в чем разница с CBLOCK 0x20?
Где ссылка на 0x70?
Буду оправдываться:
в 16ф628 например, есть неполноценный вывод, у которого отсутствует +фет, для 1-вир саме то, можно гонять данные без смены банков, не трогая трис.
в 886 все выводы полноценные, потому приходиться тасовать банки, отсюда и проблемы, как я понимаю...
Самое противное, после последних правок, 3-е суток полет нормальный, не срок, конечно, но выходные самые сетепроблемные в часном секторе. Думаю заcлуга в распределении времени по операциям: процедуры по очереди, не пересекаясь с обработками прерываний (кроме Т1, но тут, если выпадет пара импульсов при плавном включении освещения, криминала не будет: всеравно, в конце концов, установится макс. яркость).
Овчинка выделки... Не та игрушка. Вопрос темы то WDT $)
__________________
Смотрящий под ноги - звёзды видит в лужах.
Последний раз редактировалось rusyvochka; 24.05.2016 в 22:48.
|
|
|
|
24.05.2016, 22:54
|
|
Прописка
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
|
Re: WDT
CBLOCK - моветон
udata_shr – BEGIN AN OBJECT FILE SHARED UNINITIALIZED DATA
SECTION (PIC12/16 MCUs)
4.64.1 Syntax
[label] udata_shr [RAM_address]
4.64.2 Description
This directive declares the beginning of a section of shared uninitialized data. If label
is not specified, the section is named .udata_shr. The starting address is initialized
to the specified address or will be assigned at link time if no address is specified. This
directive is used to declare variables that are allocated in RAM that is shared across all
RAM banks (i.e. unbanked RAM).
|
|
|
|
24.05.2016, 23:06
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: WDT
Доходчиво, бум знать, сенк!
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
24.05.2016, 23:08
|
|
Супер-модератор
Регистрация: 09.06.2011
Сообщений: 2,633
Сказал спасибо: 73
Сказали Спасибо 1,793 раз(а) в 647 сообщении(ях)
|
Re: WDT
Сообщение от rusyvochka
|
70h - F0h - 17h - 1Fh.
accesses - асоциируется, я так понимаю, а как на самом деле происходит?
|
На самом деле происходит так: 70h, F0h, 170h и 1F0 - это физически один и тот же регистр, то есть обращение к которому не зависит от установленного банка (RP0, RP1). Можете записать в 1F0h и потом прочитать это значение из 70h, никакой разницы. И так до регистра 7F (он же - FFh, 17Fh, 1FF). Собственно, это и сделано для того, чтобы можно было сохранить контент при входе в прерывание, когда номер установленного банка заранее не известен.
Сообщение от rusyvochka
|
И можно / нужно ли в эти адреса помещать "рабочие" регистры: Temp, Cykl, Time ну и др, которые меняются в программе.
|
Да, конечно, можно использовать как обычные регистры, но с учетом названных выше особенностей.
|
|
|
|
24.05.2016, 23:17
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: WDT
Сообщение от rusyvochka
|
Доходчиво, бум знать, сенк!
|
Да ничего ты не будешь знать! Переходи на СИ и не мучайся, а не рви свой мозг задрот-АСМ-тягомотиной. От твоей АСМ писанины всё равно толку никакого нет.
|
|
|
|
24.05.2016, 23:26
|
|
Прописка
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
|
Re: WDT
пардон, в моём примере был грязный хак, исправился. это для 16f676 было 0x020, адрес линкер должен сам назначить 0x070
Последний раз редактировалось cogen; 24.05.2016 в 23:35.
|
|
|
|
24.05.2016, 23:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,512
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: WDT
Сообщение от cogen
|
CBLOCK - моветон
|
Дануна... Ща научите, блин...
это обычная директива ассма, позволяющая объявлять группу с последовательными адресами.
По вашему, лучше писать equ в каждой строчке? Запутаться блин, если че вдруг поправить...
И не путайте генерацию объектных файлов и пись в абсолютном коде
И вообще, да... Чем ТАК писать на асме, лучше уже не мучиться и начать писать на Си. Там хоть половину работы сделает компилятор...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:07.
|
|