-
1. Data: 2016-05-02 10:35:44
Temat: dspic33ep64mc504 i "atomowe"operacje na portach pytanie
Od: "michal" <...@b...pl>
Witam.
Kompilator to XC wersja w trybie darmowym, optymalizacja 1.
Wbrew temu co sugeruje help,
"LATGbits.LATG5 = 1; /* No problem likely, this is an assignment of a
single bit and will use a single instruction bit set operation */"
przypisanie takie nie
jest tlumaczone na pojedyncza instrukcji ustawiania bitu tylko realizaowane
jako odczyt - modyfikacja- zapis portu.
Gdy mamy to robione w main a w przerwaniu rowniez sa zapisy do tego
portu powoduje to problem ktory ujawnia sie po losowym czasie.
Pytanie czy istniej mozliwość ustawienia pinu portu w "atomowej" operacji
za pomoca jakiejs wstawki asemblera ?
Czy problem sie bierze z tytulu ze kompilator to wersja darmowa a w wersji
pelnej bedzie dobrze.
Rozwiazanie sugerowane przez help tj wylaczenie przerwan na czas modyfikacji
portu w petli
glownej (makro INTERRUPT_PROTECT )dziala ale nie jest dobre, po pierwsze
blokuje przerwania, po drugie dodaje narzut.
pozdrawiam.
Michal
-
2. Data: 2016-05-02 17:36:04
Temat: Re: dspic33ep64mc504 i "atomowe"operacje na portach pytanie
Od: Artur Miller <n...@n...com>
W dniu 2016-05-02 o 10:35, michal pisze:
> Witam.
> Kompilator to XC wersja w trybie darmowym, optymalizacja 1.
> Wbrew temu co sugeruje help,
>
> "LATGbits.LATG5 = 1; /* No problem likely, this is an assignment of a
> single bit and will use a single instruction bit set operation */"
>
> przypisanie takie nie
> jest tlumaczone na pojedyncza instrukcji ustawiania bitu tylko realizaowane
> jako odczyt - modyfikacja- zapis portu.
> Gdy mamy to robione w main a w przerwaniu rowniez sa zapisy do tego
> portu powoduje to problem ktory ujawnia sie po losowym czasie.
>
> Pytanie czy istniej mozliwo?? ustawienia pinu portu w "atomowej" operacji
> za pomoca jakiejs wstawki asemblera ?
jeśli chcesz assembler, to zrób makro definiujące atomowy (jedną
instrukcją) zapis do portu.
a.
-
3. Data: 2016-05-02 18:27:30
Temat: Re: dspic33ep64mc504 i "atomowe"operacje na portach pytanie
Od: Marek <f...@f...com>
On Mon, 2 May 2016 10:35:44 +0200, "michal" <...@b...pl> wrote:
> "LATGbits.LATG5 = 1; /* No problem likely, this is an assignment
of a
> single bit and will use a single instruction bit set operation */"
> przypisanie takie nie
> jest tlumaczone na pojedyncza instrukcji ustawiania bitu tylko
realizaowane
> jako odczyt - modyfikacja- zapis portu.
Na pewno ta operacja r-m-w nie jest realizowana pojedynczą
instrukcją w dspic33?
Uważaj na XC w wersji darmowej, w tej wersji XC generuje dużo "dummy
instructions" aby rozepchnąć i spowolnić kod. Być może analizując
wygenerowany assembler dla
LATGbits.LATG5 = 1;
dałeś się wprowadzić w pole przez ekstra zbędne instrukcje.
--
Marek