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

Konfiguracja FreeRTOS na STM32F407VG – poprawne ustawienie czasów i obsługa wielu zadań

ienecode 14 Sie 2015 13:42 1071 6
REKLAMA
  • #1 14920599
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Witam,

    Na STM32F407VG Discovery zaimplementowałem sobie system freeRTOS.
    Do projektu systemu dołączyłem pliki z ARM_CM4F... Mam nadzieje że dobrze ....

    Stworzyłem jakiś proste zadania i teraz chce dojść co i jak z tymi czasami i częstotliwościami.
    Skoro mój STM może mieć max 168MHz to poprostu w pliku freeRTOSConfig.h wpisać tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i to wszystko ? Skoro w TICK_RATE_HZ mam 1000 to interwał między tikami to 1ms ?

    Mój main to:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I niby działa - właczenie/wyłaczenie diody za pomocą przycisku trwa około 3 sekund....
    Jeśli zmniejszę
    vTaskDelay(1000); na
    vTaskDelay(10); to nie zapalanie/zgaszenei diody dzieje się natychmiast... Czy to dobrze ? Nie czuję tego zbyt... Co jak dojdzię jeszcze 4 zadania np 4 komunikacje USART ?
  • REKLAMA
  • #2 14922812
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    Damian7546 napisał:
    Skoro w TICK_RATE_HZ mam 1000 to interwał między tikami to 1ms ?

    Generalnie tak...

    Damian7546 napisał:
    Co jak dojdzię jeszcze 4 zadania np 4 komunikacje USART ?

    A co ma być? Usypiasz wątek na 1000ms i twierdzisz, ze wolno się wykonuje? :D

    Damian7546 napisał:
    I niby działa - właczenie/wyłaczenie diody za pomocą przycisku trwa około 3 sekund....

    Niby działa bo to co ty napisałeś to jest niby-kod. Jeśli chcesz sprawdzić czy RTOS na pewno ma chciany tick, to olej ten przycisk, tylko wrzuć kod migający LEDem
    Kod: text
    Zaloguj się, aby zobaczyć kod

    LED powinien migać z częstotliwością 1Hz. A jak nie wierzysz w swój biologiczny zegar, to podłącz oscyloskop do pina który machasz i będziesz miał precyzyjny pomiar częstotliwości...
  • REKLAMA
  • #3 14923413
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    nsvinc napisał:
    LED powinien migać z częstotliwością 1Hz. A jak nie wierzysz w swój biologiczny zegar, to podłącz oscyloskop do pina który machasz i będziesz miał precyzyjny pomiar częstotliwości...


    Zawsze z 1Hz niezależnie od częstotliwości wpisanej w #define configCPU_CLOCK_HZ ??

    Hmm skoro stm32f407 moze miec max 168MHz to czy ja wpisze w configCPU_CLOCK_HZ 72MHz czy 168MHz to częstotliwość będzie 1 Hz ? A gdzie podaje się wartość kwarcu ?
  • REKLAMA
  • #4 14924146
    DXFM
    Poziom 20  
    Posty: 340
    Pomógł: 39
    Ocena: 26
    Damian7546 napisał:
    Hmm skoro stm32f407 moze miec max 168MHz to czy ja wpisze w configCPU_CLOCK_HZ 72MHz czy 168MHz to częstotliwość będzie 1 Hz ? A gdzie podaje się wartość kwarcu ?

    Zobacz sam, co się dzieje w funkcji SystemInit(). Ma ona między innymi skonfigurować systick. Standardowo ustawia się go tak, żeby generował przerwania z częstotliwością 1kHz, ale może być inna.
  • REKLAMA
  • #5 14924455
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    nsvinc napisał:
    LED powinien migać z częstotliwością 1Hz. A jak nie wierzysz w swój biologiczny zegar, to podłącz oscyloskop do pina który machasz i będziesz miał precyzyjny pomiar częstotliwości...


    Wydaje mi się że świecenie diody trwa dłużej niż 1s... raczej jestem przekonany.
  • Pomocny post
    #6 14924471
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    Damian7546 napisał:
    Wydaje mi się że świecenie diody trwa dłużej niż 1s... raczej jestem przekonany.

    1) Masz błędy w konfiguracji zegarów
    2) Nie masz żadnej pewności że rdzeń chodzi na 168MHz...
    3) Nie wiesz co jest wpisywane do systick'a
    4) Wiesz, że takt RTOSa nie wynosi 1ms

    Na podstawie powyższych punktów ogarnij sprawę zegarów
  • #7 14924484
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Standardowo jest taktowany 168MHz na wewnętrznym źródle sygnału:

    Dodano po 13 [sekundy]:



    Dodano po 28 [sekundy]:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

Podsumowanie tematu

✨ Na forum dyskutowano o konfiguracji FreeRTOS na płytce STM32F407VG. Użytkownik zadał pytanie dotyczące ustawienia czasów i częstotliwości w pliku freeRTOSConfig.h, zwracając uwagę na maksymalną częstotliwość 168MHz. Odpowiedzi wskazywały na konieczność poprawnej konfiguracji zegarów oraz na to, że wartość configTICK_RATE_HZ ustawiona na 1000 oznacza interwał 1ms. Użytkownicy sugerowali testowanie działania RTOS poprzez miganie diodą LED oraz sprawdzenie konfiguracji funkcji SystemInit(), która ustawia systick. Wskazano również na potencjalne błędy w konfiguracji zegarów oraz brak pewności co do rzeczywistej częstotliwości rdzenia.
Wygenerowane przez model językowy.
REKLAMA