Znaleziono 15 wyników

autor: tuxcnc
02 cze 2025, 16:49
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

atom1477 pisze:
02 cze 2025, 16:24
Poza tym masz ST-Linka. To nie możesz zatrzymać rdzenia i zobaczyć adresu w rejestrze PC?
Ale co mi to da?
Ja szukam kodu który robi problem, a Ty mi każesz dłubać w procesorze...
Jeśli Arduino na STM32 nie da się używać bez HAL, no to się nie da i nie ma sensu tego robić, bo za co się nie zabierzesz, to będzie droga przez mękę...
autor: tuxcnc
02 cze 2025, 16:18
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

atom1477 pisze:
02 cze 2025, 16:11
Poza tym nigdzie nie pisałeś że procek jest martwy.
Uparcie odpowiadasz na posty, których nie czytałeś.
tuxcnc pisze:
02 cze 2025, 14:30
Jeśli obie linie są odkomentowane, to konwerter serial<>USB jest martwy i niczego więcej sprawdzić się nie da.
(Poprzednio (TIM1 i USB) procek się wieszał dopiero przy przerwaniu, tutaj układ się w ogóle nie daje uruchomić.)
autor: tuxcnc
02 cze 2025, 16:04
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

atom1477 pisze:
02 cze 2025, 14:40
Uparcie nie chcesz się tego dowiedzieć. Dałbyś w przerwaniu zapalanie LEDa, i już byś wiedział o wiele więcej.
Nie zapala się: procek chodzi w inną funkcję przerwania. A tam zastaje na przykład while(1).
Zapala się: procek wchodzi do Twojej funkcji, ale np. nie kasuje bitu przerwania (przez co wchodzi w to przerwanie w kółko).
LED to skrót myślowy. Nie misi tam być fizycznego LEDa, tylko wystarczy multimetrem czy oscyloskopem sprawdzić napięcie na pinie.
Ale Ty dalej nie czytasz tego co piszę, tylko dyskutujesz z tym, co sam wymyśliłeś...
Jak mam zapalić LED-a, kiedy procesor jest martwy a program w ogóle się nie uruchamia?
Zresztą to nie o to chodzi.
Kiedy włączysz przerwania bitem DIER, to procek działa. Zapewne (bo tak powinno być) tablica przerwań jest zapisana rozkazami powrotu z przerwania. Dzięki temu można wywołać przerwanie, które nie ma napisanej obsługi i po prostu dzieje się nic.
Użycie NVIC_EnableIRQ zapewne robi taki burdel w systemie, że dzieją się cuda...
Coś znalazłem https://www.stm32duino.com/viewtopic.php?t=1923
To trochę nie na temat, ale w okolicy.
Wynika z tego, że HAL tak się rozpanoszył, że uniemożliwia korzystanie z funkcji, które były wcześniej dostępne.
W skrócie, jak się chce korzystać ze starego kodu, to trzeba HAL wyłączyć.
Na razie nic mi się nie udało z tym zrobić, ale brzmi to rozsądnie i pasuje do problemu.
autor: tuxcnc
02 cze 2025, 14:37
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

atom1477 pisze:
02 cze 2025, 14:33
Tak. Że autor wątku który twierdzi że HAL jest dla debili a porządni programiści robią na rejestrach, uruchomił program na HALu ale nie potrafi tego zrobić na rejestrach.
A to jakiś wstyd nie umieć czegoś, co nigdy wcześniej nie było potrzebne?
Wiem, że są sposoby żeby podłożyć funkcji adres w pamięci od którego ma się uruchomić, ale teraz nie chodzi mi o to żeby zaczęło działać, tylko żeby się dowiedzieć dlaczego nie działa, bo to bardzo cenna wiedza.
autor: tuxcnc
02 cze 2025, 14:30
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

atom1477 pisze:
02 cze 2025, 13:15
Bo jesteś tępy.
drzasiek90 pisze:
02 cze 2025, 13:09
Ale wolisz rżnąć głupa dalej.
Obaj jesteście debilami...

Ponieważ gdzieś w necie wyczytałem, że przyczyną może być konflikt z obsługą USB, więc ją wyłączyłem.
Arduinowy Serial uparł się działac na pinach PA9 (TX) i PA10 (RX), co się kłoci z TIM1, więc musiałem jego kod zakomentować i testy robić na TIM3, co ma taką zaletę, że TIM3 ma tylko jeden wektor przerwania TIM3_IRQHandler.

W kodzie są dwie interesujące nas linie:

Kod: Zaznacz cały

TIM3->DIER|=TIM_DIER_UIE; // Włącza przerwanie
NVIC_EnableIRQ(TIM3_IRQn); // Ustawia przerwanie
I nie pieprzcie, że NVIC_EnableIRQ ustawia DIER, bo gówno prawda.
Jeżeli zakomentuję jedną,dowolną, linię z tych dwóch (albo obie), to licznik liczy w kółko, a Serial.println(TIM3->CNT); wyświetla zliczone impulsy.
Jeśli obie linie są odkomentowane, to konwerter serial<>USB jest martwy i niczego więcej sprawdzić się nie da.
(Poprzednio (TIM1 i USB) procek się wieszał dopiero przy przerwaniu, tutaj układ się w ogóle nie daje uruchomić.)

Czyli :

//TIM3->DIER|=TIM_DIER_UIE;
NVIC_EnableIRQ(TIM3_IRQn);
DZIAŁA

Lub

TIM3->DIER|=TIM_DIER_UIE;
//NVIC_EnableIRQ(TIM3_IRQn);
DZIAŁA

Lub

//TIM3->DIER|=TIM_DIER_UIE;
//NVIC_EnableIRQ(TIM3_IRQn);
DZIAŁA

Ale

TIM3->DIER|=TIM_DIER_UIE;
NVIC_EnableIRQ(TIM3_IRQn);
Robi z procka cegłę...



Czy coś dotarło do pustych łbów ???
autor: tuxcnc
02 cze 2025, 12:58
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

atom1477 pisze:
02 cze 2025, 08:38
Nic nam tez nie powiedziałeś, więc pewnie nie sprawdziłeś, na temat tego czy program wchodzi do tego przerwania.
Chcesz wyjść na większego idiotę od tego drugiego?
Przecież napisałem wyraźnie, że po przepełnieniu licznika procek się wiesza.
Cholera wie gdzie wchodzi i co robi, bo nie ma jak tego sprawdzić.
Poza tym, to nie myl tego jak coś MA działać, od tego jak działa.
Wiem doskonale że NVIC_EnableIRQ ma skonfigurować przerwanie, ale nie wiadomo czy i jak to robi.
Skonfigurować, bo włączyć i wyłączyć jest w bicie DIER rejestru TIMx.

Jak ja mam z Wami rozmawiać, kiedy zamiast czytać co napisałem, zmyślacie sobie różne bzdury?
autor: tuxcnc
01 cze 2025, 23:32
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

drzasiek90 pisze:
01 cze 2025, 23:20
Tobie naprawdę nie warto pomagać.
To ty sobie nie radzisz z tak prostym problemem, nie ja.
Nie mój kod wywala błąd tylko Twój projekt do którego dodałeś kawałek mojego.
Nie pokazałeś całego projektu tylko fragment kodu więc nie wiadomo co dodajesz i gdzie.
Ale już zostało wszystko wyjaśnione gdzie jest problem i co powinieneś zrobić aby mieć obsługę przerwania i aby nie było błędu!
Jeśli tego nie rozumiesz to jesteś po prosru miernym programistą i naprawdę powinieneś rozważyć aby zająć się czymś innym.
Temat jest wyczerpany i średnio ogarnięty programista na podstawie tych informacji będzie wiedział co zrobić.
A ty rżnij głupa dalej bo na "dziękuję za pomoc" jesteś za słaby.
Więc lepiej odwrócić kota ogonem i jeszcze obrażać tych co ci pomogli.
Jesteś niemożliwe wkurzający i irytujący.
Ale Ty jesteś tępy...
Napisałem kod, który obsługuje enkoder kwadraturowy. Liczy w przód i w tył, problem jest tylko taki, że licznik jest 16-bitowy, więc w większości zastosowań się przepełni, a nie powinien.
Dlatego jest potrzeba użyć przerwania z licznika, aby rozszerzyć wynik na co najmniej 32 bity, co zrobiłem w innych programach używających bibliotek, ale tutaj chcę bez bibliotek.
Tak więc w moim kodzie nie ma sensu szukać błędu, bo go tam nie ma.
Jeśli nie użyję NVIC_EnableIRQ(TIM1_UP_IRQn), to licznik liczy w kółko, a jak użyję NVIC_EnableIRQ(TIM1_UP_IRQn) to dolicza do 65535 i program się zawiesza.
Znaczy to dokładnie tyle, że NVIC_EnableIRQ(TIM1_UP_IRQn) nie działa tak, jak można oczekiwać.

A ty wkleiłeś kod z extern "C" , więc Ci grzecznie odpisałem, że się nie kompiluje i jakie błędy wywala.
A teraz mi tłumaczysz, że to ja jestem kretynem...

Jeśli masz tak "pomagać", to sobie odpuść.
autor: tuxcnc
01 cze 2025, 23:14
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

drzasiek90 pisze:
01 cze 2025, 22:50
tuxcnc pisze:
01 cze 2025, 22:45
Przecież to Ty utworzyłeś własny TIM1_UP_IRQHandler używając extern "C"...
Czytasz czasem jakie głupoty piszesz?
Nie przeanalizowałes sam co ci wyrzucił kompilator więc dostałeś ode mnie informację gdzie i w czym jest błąd.
Podałem ci dwie możliwe opcje.
Do obsługi przerwania musisz mieć jego obsługę.
Więc albo utwórz swoją (pokazałem ci jak bo nie wiesz jak, ale wtedy nie używaj biblioteki która już to samo implementuje) albo nie twórz swojej i skorzystaj z tej którą już masz w bibliotece.

A jak nie potrafisz takich prostych rzeczy to zajmij się malowaniem albo jaka inna sztuką - ty byś zapewne takiej rady udzielił.
Ale i tak tego nie zrozumiesz.
Co się tak uparłeś wyjść na idiotę?
To TWÓJ kod wywala błąd !!!
autor: tuxcnc
01 cze 2025, 22:45
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

drzasiek90 pisze:
01 cze 2025, 22:41
To znaczy, że HardwareTimer (z biblioteki STM32Duino) już ma własną wersję obsługi tego przerwania, i Twój kod ją duplikuje.

Opcja 1: Nie używaj HardwareTimer
Opcja 2: Nie twórz własnego TIM1_UP_IRQHandler
Przecież to Ty utworzyłeś własny TIM1_UP_IRQHandler używając extern "C"...
Jak masz dawać takie rady, to lepiej idź się wyspać.
autor: tuxcnc
01 cze 2025, 22:36
Forum: Na luzie
Temat: Dokąd zmierza świat?
Odpowiedzi: 50
Odsłony: 996

Re: Dokąd zmierza świat?

drzasiek90 pisze:
01 cze 2025, 22:28

Kod: Zaznacz cały

extern "C" void TIM1_UP_IRQHandler(void) {
    if (TIM1->SR & TIM_SR_UIF) {
        TIM1->SR &= ~TIM_SR_UIF;  // Wyczyść flagę

    }
}
Już tego próbowałem

Kod: Zaznacz cały

/root/.arduino15/packages/STMicroelectronics/tools/xpack-arm-none-eabi-gcc/14.2.1-1.1/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld: /root/.cache/arduino/sketches/2BC163F6C542CC480C7C3C122E542D51/libraries/SrcWrapper/HardwareTimer.cpp.o: in function `TIM1_UP_IRQHandler':
HardwareTimer.cpp:(.text.TIM1_UP_IRQHandler+0x0): multiple definition of `TIM1_UP_IRQHandler'; /root/.cache/arduino/sketches/2BC163F6C542CC480C7C3C122E542D51/sketch/STM32-Baremetal-Qencoders.ino.cpp.o:STM32-Baremetal-Qencoders.ino.cpp:(.text.TIM1_UP_IRQHandler+0x0): first defined here
collect2: error: ld returned 1 exit status
exit status 1

Compilation error: exit status 1
Bez extern "C" kompiluje się, ale liczy do zapełnienia licznika i się zawiesza.

Wróć do „Dokąd zmierza świat?”