logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

STM32: Rodzaje przerwań rdzenia vs zewnętrzne, NVIC i priorytety

vp32 26 Lis 2019 08:25 957 12
REKLAMA
  • #1 18302073
    vp32
    Poziom 11  
    Posty: 505
    Ocena: 47
    Niby proste, ale jak ma się mało do czynienia z STM32 to zaczyna byc jednak mylące

    Mam takich parę pytań bo sie lekko zamieszałem, a nie do końca wiem gdzie to może być napisane?
    1. Które z przerwań, wyjątków są związane z rdzeniem, a które za tzw. zewnętrzne?
    2. Które przerwania "przechodzą" przez NVIC? Każde z ustawianym priorytetem. Z tego co rozumiem to tylko te zewnętrze jak przerwania od licznika, UARTa.
    3. A skoro tak to jak to się ma do ustawiania priorytetów, grup i podgrup dla przerwań takich jak SVCall, PendSV, SysTick,Bus fault? Nie chodzi o to że większość z nich się nie używa normalnie tylko jak to ma się do grupowania, NVIC i nr priorytetu?
  • REKLAMA
  • #2 18302185
    osctest1
    Poziom 21  
    Posty: 451
    Pomógł: 36
    Ocena: 74
    Wszystkie poza HF I NMI mają ustawiamy priorytet. NVIC jest można powiedzieć częścią rdzenia i vendor nie może go sobie pominąć.

    Trzeciego pytania nie rozumiem. Wytłumacz o co Ci chodzi
  • REKLAMA
  • #3 18302214
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    1. Pierwsze 14 wyjątków pochodzi z rdzenia (2+14 adresów w tablicy). Te z rdzenia mają numery ujemne lub 2..15, spoza rdzenia - nieujemne lub od 16 w górę.
    2. Jw, ale część wyjątków rdzenia też ma ustawiany priorytet.
    3. Najlepiej zapomnij o "grupowaniu". W praktyce nie ma żadnego sensu korzystanie z tego. Domyślnie po reset mamy zawsze konfigurację z maksymalną liczbą priorytetów wywłaszczania i nie ma sensu jej zmniejszać. Trochę bez sensu zrobiono w CMSIS to rozdzielenie dwóch części priorytetu - łatwiej byłoby się posługiwać po prostu 8-bitową wartością wpisywaną do IPR, a tak, jak jest, w wywołaniach musimy pamiętać, ile poziomów wywłaszczania obsługuje rdzeń.
  • REKLAMA
  • #4 18302350
    vp32
    Poziom 11  
    Posty: 505
    Ocena: 47
    osctest1 napisał:
    Trzeciego pytania nie rozumiem. Wytłumacz o co Ci chodzi

    chodzi mi o to czy możliwość ustawiania priorytetów. Z tego co piszecie to do NVIC przychodzą wszystkie przerwania, a myślałem że tylko te spoza rdzenia. Tak ktoś kiedyś opisał to w książce.
    są też rózne rejestry dla przerwań IPR oraz System handler priority registers (SHPRx). Rozumiem ze i tak schodzą do NVIC?

    Czasami dobrze jest zmienić priorytet, przydało mi się kilka razy wiec dobra to sprawa.
  • #6 18306408
    vp32
    Poziom 11  
    Posty: 505
    Ocena: 47
    możecie mi podpowiedzieć jaki jest polecany prosty w obsłudze IDE do STM32? JHestem przyzwyczajony do KEILa ale on ma ograniczenie do 32k
    Szukam coś podobnego, bo Keil ma dość fajna możliwość symulacji programowej, z podglądem jak wygląda kod w ASM.
    Znacie coś?
  • #7 18306418
    osctest1
    Poziom 21  
    Posty: 451
    Pomógł: 36
    Ocena: 74
    vp32 napisał:
    możecie mi podpowiedzieć jaki jest polecany prosty w obsłudze IDE do STM32? JHestem przyzwyczajony do KEILa ale on ma ograniczenie do 32k
    Szukam coś podobnego, bo Keil ma dość fajna możliwość symulacji programowej, z podglądem jak wygląda kod w ASM.
    Znacie coś?
    każdy ale bez symulacji programowej(Nie wiem zresztą jak można zrobić symulację takiego f7)

    Teraz stm32cube IDE.
  • #8 18306430
    vp32
    Poziom 11  
    Posty: 505
    Ocena: 47
    Mnie wystarczy jak mam możliwość podglądnięcia jak kompilator poradził sobie z jakimś odwołaniem, instrukcją. Coś jak w AVRStudio było.
    Wiadomo ze takiego F7 nie da się zasymulować, i w ogóle trudno zrobić symulacje programową np z RTOS!

    o stm32cube IDE słyszałem ale jeszcze nie wiem co to dokładnie jest, bo w głowie mam stm32cube bez ide
  • #9 18306443
    osctest1
    Poziom 21  
    Posty: 451
    Pomógł: 36
    Ocena: 74
    Każdy nawet bez ide. Wystarczy wygenerować lst z pliku obiektowego.

    Zresztą to podglądanie w ARMach ma raczej małe praktyczne znaczenie, poza jakimiś bardzo specyficznymi momentami
  • #10 18306448
    vp32
    Poziom 11  
    Posty: 505
    Ocena: 47
    Ale jest wygodne. Dla was tak mocno zaawansowanych w tym jest to nie zbyt potrzebne i fajne, ale dla mnie na początku zabawy bardzo jana możliwość podglądu jak z C na asm kompilator zamienia.

    osctest1 napisał:
    Wystarczy wygenerować lst z pliku obiektowego


    chyba nie do końca wiesz o czym piszesz. jak mam keila to po testuj sobie przechodzenie po kroku przez instrukcje a potem spróbuj to samo zrobić z plikiem lst. może jak ktoś w pamięci umie w hex dodawać skoki to ok
  • #11 18306464
    osctest1
    Poziom 21  
    Posty: 451
    Pomógł: 36
    Ocena: 74
    <ciach> ... zadawaj pytania poprawnie. Wykonywanie instrukcji maszynowych w trakcie debugowania ma każdy GDB, a co za tym idzie praktycznie każde IDE.

    Moderowany przez Marek_Skalski:

    Usunąłem zbędną treść stojącą w sprzeczności z 3.1.9. Następny taki atak skutkuje ostrzeżeniem.

  • #12 18306606
    szelus
    Poziom 34  
    Posty: 1508
    Pomógł: 315
    Ocena: 53
    vp32 napisał:
    ...a potem spróbuj to samo zrobić z plikiem lst. może jak ktoś w pamięci umie w hex dodawać skoki to ok

    Ale to nie jest tak. Na listingu skoki są dobrze zaznaczone, bądź przez etykiety tymczasowe, bądź nawet przez adres względny, ale dla każdej instrukcji adres względny jest podany.
    Tylko tak jak napisał octest1, dla ARM, przy obecnym zaawansowaniu kompilatorów, wyłapanie powiązania kodu źródłowego z wynikiem kompilacji przy włączonej optymalizacji nie jest proste, nawet dla tych, co na tym zęby zjedli. :) Także nie frustruj się.
  • REKLAMA
  • #13 18307407
    osctest1
    Poziom 21  
    Posty: 451
    Pomógł: 36
    Ocena: 74
    dla miłoścników natychmiastowej satysfakcji jest godbolt.

    Tam można sprawdzić wszystko na szybko (tu np. jak zmusić kompilator do zrobienia odpowieniej szerokości zaipisu i odczytu):https://godbolt.org/z/WbxkKr

    Można nawet "na zywo" wykonywać programy online (ale to tylko oczywiście na pc-cie)

    https://godbolt.org/z/qxMQJW

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy przerwań w rdzeniu STM32, w tym różnic między przerwaniami rdzeniowymi a zewnętrznymi oraz ich interakcji z NVIC. Uczestnicy wyjaśniają, że przerwania rdzeniowe mają numery ujemne lub od 2 do 15, podczas gdy przerwania zewnętrzne zaczynają się od 16. NVIC obsługuje zarówno przerwania zewnętrzne, jak i niektóre przerwania rdzeniowe, które mogą mieć ustawiane priorytety. W kontekście grupowania priorytetów, sugeruje się, aby nie korzystać z tej funkcji, ponieważ domyślna konfiguracja po resecie zapewnia maksymalną liczbę priorytetów. Uczestnicy poruszają również temat IDE do STM32, polecając STM32Cube IDE jako alternatywę dla KEILa, mimo że nie oferuje symulacji programowej.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA