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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 22.03.2020, 00:49   #1
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Непонятка с прерываниями в PIC24...

Здравствуйте.
Пишу для PIC24FJ128GA204 в MPLAB IDE 8.92.
Вот пример упрощённого исходника с проблемой:
Код:
.INCLUDE	"P24FJ128GA204.inc"
;-------------------321098765432109876543210	
CONFIG __CONFIG1, 0b111111110011111111111111	
CONFIG __CONFIG2, 0b111111110011101111111110
CONFIG __CONFIG3, 0b111111111111111111111111
CONFIG __CONFIG4, 0b111111111111001111111111

.GLOBAL __reset
.GLOBAL __T2Interrupt
size	= 227
.BSS
.DATA
.align 1
mass:	.space size
test:	.space 1

.TEXT
__reset:
	; настройка портов
	bclr	ANSA,#1
	bclr	ODCA,#1
	bset	LATA,#1
	bclr	TRISA,#1

	bset	T2CON,#4		; Fosc/8
	clr	TMR2
	mov	#(16000000/8/250),W0	; прерывания T2 f=250Hz
	mov	W0,PR2
	bset	IEC0,#T2IE		; разрешение прерываний T2
	bset	T2CON,#TON

	mov.b	#0x55,W0
	mov.b	WREG,test

loop:	mov	#mass,W1
	repeat	#(size-1)
	rlc.b	[W1],[W1++]		; сдвиг влево всех байтов (mass)
	mov.b	#0x55,W0
	cp.b	test
	bra	Z,loop

	bclr	LATA,#1
err:	bra	err

__T2Interrupt:
	bclr	IFS0,#T2IF	
	retfie

	.end
В памяти данных есть массив N байт (mass), в котором нужно делать логический сдвиг влево всех байтов. Делаю это командой "rlc.b [W1],[W1++]" в конвейерном режиме (repeat #N-1). В отсутствие прерываний всё работает корректно. При разрешенных прерываниях периодически сдвиг выполняется на 1 раз больше чем указано. Т. е. нарушается ячейка (test).
В приведенном исходнике непрерывно выполняется сдвиг (mass), перед сдвигом в (test) записывается 55h, а после выполнения сдвига (test) проверяется на совпадение с 55h - если не равно включается светодиод (PORTA,1).
Подозреваю что я неправильно представляю процесс прерываний в PIC24.
Будьте добры подскажите - почему при разрешении прерываний периодически сдвиг выполняется на 1 раз больше?
Заранее благодарен, Алексей.
alex_zas вне форума   Ответить с цитированием
Старый 22.03.2020, 01:07   #2
Guaho
Senior Member
 
Аватар для Guaho
 
Регистрация: 28.06.2013
Возраст: 48
Сообщений: 766
Вес репутации: 1674/49
Guaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant future
По умолчанию Re: Непонятка с прерываниями в PIC24...

Сохранение / восстановление критичных регистров (аккумулятор и прочее) в Вашем коде есть? Без этого код прерываний будет портить содержимое важных регистров. Вот пример кода из раздела 14.4 мануала:
Код:
MOVWF W_TEMP ;Copy W to TEMP register
SWAPF STATUS,W        ;Swap status to be saved into W 
CLRF  STATUS ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
MOVWF STATUS_TEMP     ;Save status to bank zero STATUS_TEMP register
:
:(ISR) ;Insert user code here
:
SWAPF STATUS_TEMP,W   ;Swap STATUS_TEMP register into W 
;(sets bank to original state)
MOVWF STATUS ;Move W into Status register
SWAPF W_TEMP,F        ;Swap W_TEMP
SWAPF W_TEMP,W        ;Swap W_TEMP into W

Последний раз редактировалось Guaho; 22.03.2020 в 01:12.
Guaho вне форума   Ответить с цитированием
Старый 22.03.2020, 03:52   #3
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

Насчет сохранения регистров я в курсе. В приведенном мной исходнике все урезано до минимума специально чтобы показать что в таком виде проявляется проблема.
В обработке прерывания T2 только сбрасывается флаг прерывания, больше никаких действий. Содержимое регистров не должно меняться.
alex_zas вне форума   Ответить с цитированием
Старый 22.03.2020, 10:02   #4
Guaho
Senior Member
 
Аватар для Guaho
 
Регистрация: 28.06.2013
Возраст: 48
Сообщений: 766
Вес репутации: 1674/49
Guaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant future
По умолчанию Re: Непонятка с прерываниями в PIC24...

Так Вы хотя бы комментарий в коде написали, чтоб обозначить, что это есть, а то ж непонятно.
А почему думаете, что сдвигов на 1 больше? По несовпадению значений?
И что с флагом переноса перед командой rlc? Имеет случайное значение, как повезёт?
У Вас в приведённом примере цикл сдвига делается в прерываниях - не знаю, так задумано ли или это просто тест, но - не лучший вариант (цикл внутри прерываний), правильнее будет сделать отдельный счётчик проходов.
Guaho вне форума   Ответить с цитированием
Старый 22.03.2020, 11:58   #5
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

Степень расписанности комментариев обычная. Признак что сдвигов на 1 больше - изменение значения ячейки (test). Значение флага переноса в боевой программе регулируется, просто на суть проблемы это не влияет. Я специально предельно минимизировал код чтобы проще разбираться.
Цикл сдвига выполняется не в прерывании. В прерывании вообще ничего не выполняется. Только сбрасывается флаг запроса прерывания.
Я конечно могу вставить пустую ячейку между mass и test, или организовать сдвиг без использования repeat. Но я хочу разобраться - почему так происходит.
Подскажите - где описан механизм прерываний PIC24?
При возникновении прерывания какие нибудь регистры автоматически сохраняются (например как в PIC16F1825 регистры CORE сохраняются в SHADOW)?
alex_zas вне форума   Ответить с цитированием
Старый 22.03.2020, 17:01   #6
Guaho
Senior Member
 
Аватар для Guaho
 
Регистрация: 28.06.2013
Возраст: 48
Сообщений: 766
Вес репутации: 1674/49
Guaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant future
По умолчанию Re: Непонятка с прерываниями в PIC24...

Понял Вас. Как и подозревал, у Вас всё схвачено)))
Я не великий специалист, с 24-ками не работал. Про авто-сохранение слышал, но не разбирался с этим. Если код прерываний пустой, и всё равно мешает работе... Сложно, не соображу так с ходу... Единственное и очевидное, что могу предложить - прогнать код с симуляторе и посмотреть, что там реально происходит.
А прерывания описываются в мануале в разделе "Special Futures of CPU".
Guaho вне форума   Ответить с цитированием
Старый 23.03.2020, 03:23   #7
anatoly22
Junior Member
 
Регистрация: 23.11.2015
Возраст: 51
Сообщений: 14
Вес репутации: 145/18
anatoly22 will become famous soon enoughanatoly22 will become famous soon enough
По умолчанию Re: Непонятка с прерываниями в PIC24...

Указатель стека не инициализирован.
anatoly22 вне форума   Ответить с цитированием
Старый 23.03.2020, 10:14   #8
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

anatoly22 - спасибо. Действительно при обрезании забыл про стек. После добавления в приведенный пример инициализации стека проблема ушла.
Но мне от этого не легче. В боевой программе стек инициализируется. Нужно копать дальше...
alex_zas вне форума   Ответить с цитированием
Старый 23.03.2020, 11:28   #9
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

Прошу прощения - перед предыдущим моим ответом я в спешке в примере неправильно инициализировал стек и решил что проблема ушла.
Проблема осталась!
Вот приведенный пример с правильной инициализацией стека:
Код:
.INCLUDE	"P24FJ128GA204.inc"
;-------------------321098765432109876543210	
CONFIG __CONFIG1, 0b111111110011111111111111	
CONFIG __CONFIG2, 0b111111110011101111111110
CONFIG __CONFIG3, 0b111111111111111111111111
CONFIG __CONFIG4, 0b111111111111001111111111

.GLOBAL __reset
.GLOBAL __T2Interrupt
size	= 99				; количество байт в массиве
.BSS
.DATA
.align 2
stk:	.space 80			; стек
.align 1
mass:	.space size			; сдвигаемые байты
test:	.space 1			; контрольное значение

.TEXT
__reset:
	mov	#stk,W15		; настройка стека
	mov	#(stk+80-2),W0
	mov	W0,SPLIM
	nop

	bclr	ANSA,#1			; настройка порта
	bclr	ODCA,#1
	bset	LATA,#1
	bclr	TRISA,#1

	bset	T2CON,#4		; Fosc/8
	clr	TMR2
	mov	#(16000000/8/250),W0	; прерывания T2 f=250Hz
	mov	W0,PR2
	bset	IEC0,#T2IE		; разрешение прерываний T2
	bset	T2CON,#TON		; запуск T2

	mov.b	#0x55,W0		; инициализация контрольного значения
	mov.b	WREG,test

loop:	mov	#mass,W1		; в W1 адрес начала массива
	repeat	#(size-1)
	rlc.b	[W1],[W1++]		; сдвиг влево всех байтов массива
	mov.b	#0x55,W0		; проверка контрольного значения
	cp.b	test
	bra	Z,loop

	bclr	LATA,#1			; индикация ошибки
err:	bra	err

__T2Interrupt:
	bclr	IFS0,#T2IF		; сброс флага прерывания T2
	retfie
	.end
Проблема осталась!
В приведенном выше примере возникает ошибка (при выполнении сдвига mass изменяется test).
При запрещённых прерываниях T2 ошибки нет.
Почему?
alex_zas вне форума   Ответить с цитированием
Старый 23.03.2020, 12:07   #10
SergP01
Senior Member
 
Аватар для SergP01
 
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 1,463
Вес репутации: 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: Непонятка с прерываниями в PIC24...

а тут ничего путного нет?
Цитата:
Syntax: {label:} RETFIE
Operands: None
Operation: (W15) – 2  W15
(TOS<15:8>)  (SR<7:0>)
(TOS<7>)  (IPL3, CORCON<3>)
(TOS<6:0>)  (PC<22:16>)
(W15) – 2  W15
(TOS<15:1>)  (PC<15:1>)
TOS<0>  SFA Status bit
NOP  Instruction Register
Status Affected: IPL<3:0>, RA, N, OV, Z, C, SFA
SergP01 вне форума   Ответить с цитированием
Старый 23.03.2020, 18:35   #11
Guaho
Senior Member
 
Аватар для Guaho
 
Регистрация: 28.06.2013
Возраст: 48
Сообщений: 766
Вес репутации: 1674/49
Guaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant future
По умолчанию Re: Непонятка с прерываниями в PIC24...

Цитата:
Сообщение от alex_zas Посмотреть сообщение
...Почему?
Попробуйте прогнать код в симуляторе, это достаточно хороший способ отловить причину ошибки.
Guaho вне форума   Ответить с цитированием
Старый 24.03.2020, 04:42   #12
Марк
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: Непонятка с прерываниями в PIC24...

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Вот приведенный пример с правильной инициализацией стека:
Код:
.GLOBAL __reset
.GLOBAL __T2Interrupt
size	= 99				; количество байт в массиве
.BSS
.DATA
.align 2
stk:	.space 80			; стек
.align 1
mass:	.space size			; сдвигаемые байты
test:	.space 1			; контрольное значение

.TEXT
__reset:
	mov	#stk,W15		; настройка стека
	mov	#(stk+80-2),W0
	mov	W0,SPLIM
	nop
..............
	.end
Проблема осталась!
В приведенном выше примере возникает ошибка (при выполнении сдвига mass изменяется test).
При запрещённых прерываниях T2 ошибки нет.
Почему?
Вам нравится воевать с линкером?
Вообще то расположение стека и его размер определяет линкер.
Минимальный размер стека можно выбрать в его настройках в среде.
Инициализация стека обычно производится макросами:
Код:
;==============================================
.include "pic24fj<бла-бла>.inc"
;==============================================
; так объявляют переменные (резервируют память):
    .section buf1, near, bss
<тру-ля-ля>:		.space 512  ; это массив <тру-ля-ля> из 256 слов

;==============================================
.global __reset
.global __AddressError
.global __StackError
.global __MathError
;==============================================
; так всегда стоит начинать код для любого контроллера:
    .text
__reset:
	mov		#__SP_init, W15
	mov		#__SPLIM_init, W0
	mov		W0, SPLIM
	bra		Main
;----------------------------------------------
__AddressError:
	nop
	nop
	nop
	retfie
__StackError:
	nop
	nop
	nop
	retfie
__MathError:
	nop
	nop
	nop
	retfie
;----------------------------------------------
Main:

<...всякая порнография...>

   .end
Проблемы с элементарными программами стоит искать не с помощью железа, а в симуляторе.

Последний раз редактировалось Марк; 24.03.2020 в 04:55.
Марк вне форума   Ответить с цитированием
Старый 24.03.2020, 07:15   #13
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

В боевой программе у меня мультизадачный режим, 4 стека, которые я инициализирую сам. Со стеками как бы проблем нет. Подозреваю проблема другого свойства.
Я проверял упрощённый пример в симуляторе MPLAB X 5.30 ошибки нет.
Я подправил приведенный мной упрощённый пример в соответствие с рекомендациями Марка. Но проблема осталась.
Код:
.INCLUDE	"P24FJ128GA204.inc"
;-------------------321098765432109876543210	
CONFIG __CONFIG1, 0b111111110011111111111111	
CONFIG __CONFIG2, 0b111111110011101111111110
CONFIG __CONFIG3, 0b111111111111111111111111
CONFIG __CONFIG4, 0b111111111111001111111111

size	= 5				; количество байт в массиве

.section buf1, near, bss
.align 1
mass:	.space size			; сдвигаемые байты
test:	.space 1			; контрольное значение

.GLOBAL __reset
.GLOBAL __reset
.GLOBAL __OscillatorFail
.GLOBAL __AddressError
.GLOBAL __StackError
.GLOBAL __MathError
.GLOBAL __T2Interrupt

.TEXT
__reset:
	mov	#__SP_init,W15		; настройка стека
	mov	#__SPLIM_init,W0
	mov	W0,SPLIM
	bra	Main

__OscillatorFail:
__AddressError:
__StackError:
__MathError:
	nop
	nop
	nop
	retfie

Main:	bclr	ANSA,#1			; настройка порта
	bclr	ODCA,#1
	bset	LATA,#1
	bclr	TRISA,#1

	bset	T2CON,#4		; Fosc/8
	clr	TMR2
	mov	#(16000000/8/250),W0	; прерывания T2 f=250Hz
	mov	W0,PR2
	bset	IEC0,#T2IE		; разрешение прерываний T2
	bset	T2CON,#TON		; запуск T2

	mov.b	#0x55,W0		; инициализация контрольного значения
	mov.b	WREG,test

loop:	mov	#mass,W1		; в W1 адрес начала массива
	repeat	#(size-1)
	rlc.b	[W1],[W1++]
	mov.b	#0x55,W0		; проверка контрольного значения
	cp.b	test
	bra	Z,loop

	bclr	LATA,#1			; индикация ошибки
err:	bra	err

__T2Interrupt:
	bclr	IFS0,#T2IF		; сброс флага прерывания T2
	retfie

	.end
alex_zas вне форума   Ответить с цитированием
Старый 24.03.2020, 08:00   #14
Марк
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: Непонятка с прерываниями в PIC24...

Вы меня не слышите.
В СИМУЛЯТОРЕ поставьте брекпойнт в обработчике прерываний и Вы увидите что портит Вам данные.

Можно полюбопытствовать зачем Вы пытаетесь манипулировать стеком для реализации многозадачности?
И что это за такой странный способ дробления стека для этих целей?
Ну и зачем Вы пытаетесь дробить память побайтно?
Марк вне форума   Ответить с цитированием
Старый 24.03.2020, 08:28   #15
Марк
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: Непонятка с прерываниями в PIC24...

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Но проблема осталась.
Код:
__OscillatorFail:
__AddressError:
__StackError:
__MathError:
	nop
	nop
	nop
	retfie
Вы как собираетесь различать ловушки ошибок?
Флаги рассматривать?
Что за привычка ужиматься с памятью? То переменные у Вас байтные, то обработчики совмещенные...
Если Вы хотите сделать РТОС, то я полагаю, что контекст задач, ВКЛЮЧАЯ СТЕК, нужно сохранять в ОЗУ, а при вызове задачи тупо заполнять стек из контекста и выходить из обработчика системного таймера. То есть у Вас суперлуп будет содержать только планировщик задач.
Марк вне форума   Ответить с цитированием
Старый 24.03.2020, 12:26   #16
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

В симуляторе в приведенном примере ошибки нет. Код примера в симуляторе и реальном девайсе работает по-разному. Это издержки симулятора.
У меня 4 независимых задачи, у каждой из них своя область стека и своя область хранения регистров ядра. По прерываниям таймера 250Гц происходит переключение между задачами. Сохраняются регистры ядра текущей задачи, инкрементируется номер задачи и затем восстанавливаются регистры ядра следующей задачи. Как это сделать с одним общим стеком я не представляю.
Память по-байтно можно и не дробить. Это "жлобство" - наследие длительного пользования PIC16Fxxx. С другой стороны что мешает этому существовать. Тут главное привыкнуть с самого начала.
Совмещение ловушек сделал для упрощения. В боевой программе по другому.
Качать туда-назад содержимое стеков при переключении задачи - бессмысленное действие. Зачем это делать если можно просто изменить указатель стека и лимит стека. Тем более что эти регистры входят в состав регистров ядра. Всё само собой происходит. Нужно только перед запуском правильно настроить мультизадачность. Кроме того копирование содержимого стеков увеличивает длительность обработки прерывания что есть плохо.
alex_zas вне форума   Ответить с цитированием
Старый 24.03.2020, 12:33   #17
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

Да, ещё забыл - чтобы такая мультизадачность работала нужно запретить наложение прерываний.
alex_zas вне форума   Ответить с цитированием
Старый 24.03.2020, 14:38   #18
SergP01
Senior Member
 
Аватар для SergP01
 
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 1,463
Вес репутации: 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: Непонятка с прерываниями в PIC24...

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Да, ещё забыл - чтобы такая мультизадачность работала нужно запретить наложение прерываний.
"вложение"
если не секрет- какие такие задачи данный камень выполняет?

моя поделка на ADSP2191, без всяких многозадачностей, на С, с обработкой 6 прерываний- имитировала разные локаторы... аналоговые развертки( sin, cos на лету считала), цели, цифровые ответчики от целей(пачка импульсов 6,12нс ... в которой шифровалось на лету= всякие бортовые номера, высота и прочее... 256шт ( целей).....
двигала цели по маршрутам... общалась по ISA шине, чтобы можно было маршруты целей менять....
ещё и помехи - шумы в видеосигнале и наводки 50,440гц имитировала(аналоговые)....
при этом памяти хватило на все локаторы и налету можно было любой из них включить.

я как то даже не озадачивался хитрыми настройками памяти... всё было по дефолту, что мне IDE предложила при создании проекта... и ни каких ASM вставок не было...
SergP01 вне форума   Ответить с цитированием
Старый 24.03.2020, 14:57   #19
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

Ого! Круто. У меня проще. Терминальный профиль, трансляция по TCP дифф поправок от опорной станции, навигационных данных на сервер, Web-интерфейс по WiFi, общение по RS-485 с бортовым оборудованием, по RS-422 с навигационным модулем.
Просто мультизадачная модель мигрировала в этот проект с предыдущего проекта на PIC16F18877. Там было 6 последовательных интерфейсов, 5 из которых SOFT-UART-ы. Из-за этого длительность обработки прерываний должна была быть минимальной. Но требовалось на лету выполнять расчёты в FLOAT32. Поэтому там применил мультизадачность.
А с другой стороны так писать проще.
alex_zas вне форума   Ответить с цитированием
Старый 24.03.2020, 15:14   #20
SergP01
Senior Member
 
Аватар для SergP01
 
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 1,463
Вес репутации: 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: Непонятка с прерываниями в PIC24...

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Ого! Круто. У меня проще. Терминальный профиль, трансляция по TCP дифф поправок от опорной станции, навигационных данных на сервер, Web-интерфейс по WiFi, общение по RS-485 с бортовым оборудованием, по RS-422 с навигационным модулем.
Просто мультизадачная модель мигрировала в этот проект с предыдущего проекта на PIC16F18877. Там было 6 последовательных интерфейсов, 5 из которых SOFT-UART-ы. Из-за этого длительность обработки прерываний должна была быть минимальной. Но требовалось на лету выполнять расчёты в FLOAT32. Поэтому там применил мультизадачность.
А с другой стороны так писать проще.
может камень пожирнее (частота) взять и писать на С?
UARTы ... навесить наруже 6 максов и последовательно с ними работать по аппаратному UART в МК (скорости хватит даже на переключение разных настроек UART-ов)
у меня тоже флоты были... синусы считали и наводки...
а функция синуса на ASM- это страница A4 кода, вместо sin(a)
а потом- когда на ASM пишешь- вечно головная боль за всякие регистры... асобливо- когда в прерывание падаешь....
вот у меня такого не было.... был только приоритет прерываний...

а по поводу- проще... я себе с трудом представляю формулу на ASM (много этажную) которая считает расстояние с учётом геокоординат(типа кривизна земли)

Последний раз редактировалось SergP01; 24.03.2020 в 15:19.
SergP01 вне форума   Ответить с цитированием
Старый 24.03.2020, 15:34   #21
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

Нет. Я считаю что многофункциональные прграммы на асме писать проще в мультизадачном режиме чем на асме в обычном режиме. Си в сравнении не учавствует.
alex_zas вне форума   Ответить с цитированием
Старый 24.03.2020, 15:43   #22
SergP01
Senior Member
 
Аватар для SergP01
 
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 1,463
Вес репутации: 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: Непонятка с прерываниями в PIC24...

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Нет. Я считаю что многофункциональные прграммы на асме писать проще в мультизадачном режиме чем на асме в обычном режиме. Си в сравнении не учавствует.
псевдомультизадачность.... прерывания без вложений.... выполняются последовательно.... PUSH,POP.... зачем куча стеков?
пока вы из обработчика не выйдите- остальные будут в очереди сидеть....
если вы корректно выходите....
сделайте прерывание в 5мгц
всегда будет вовремя приходить, для ваших килоботов
SergP01 вне форума   Ответить с цитированием
Старый 24.03.2020, 15:43   #23
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

А что такое "6 максов"?
alex_zas вне форума   Ответить с цитированием
Старый 24.03.2020, 15:46   #24
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

Чтобы задачи были независимые у каждой свой стек.
alex_zas вне форума   Ответить с цитированием
Старый 24.03.2020, 15:52   #25
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Непонятка с прерываниями в PIC24...

Есть программисты, которые пишут весь код в обработке прерываний. Есть - которые обработку прерываний делают минимальной. Есть - которые реализуют мультизадачность. Это разные стили.
Кому как удобней...
alex_zas вне форума   Ответить с цитированием
Ответ

Метки
pic24, repeat, прерывания


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC24 + UART проблема с TX прерываниями k-o-l-y-a Продукция MICROCHIP 8 07.05.2010 19:19
PIC24, непонятка с TMR1 Troydon Продукция MICROCHIP 0 10.11.2009 23:33
PIC24 и CCD-матрица gontharov Продукция MICROCHIP 23 30.10.2008 09:19
CCS для PIC24 Alexey Belodvortsev Продукция MICROCHIP 2 10.02.2008 10:32
PIC24 viael Продукция MICROCHIP 3 02.06.2007 22:44


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


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