[STM32] Zamiennik _delay_ms na Systicku

Tu możesz pisać o swoich problemach z pisaniem programów w języku C/C++ dla STM.
Awatar użytkownika
dambo
Expert
Expert
Posty: 632
Rejestracja: czwartek 17 mar 2016, 17:12

[STM32] Zamiennik _delay_ms na Systicku

Postautor: dambo » czwartek 02 lut 2017, 18:23

Witam, robię porządki w bibliotekach i tymi przydatnymi się podzielę, może komuś się przyda.

Na początek - prosta funkcja opóźniająca (wiem, że normalnie się tego nie powinno stosować, ale do nauki się przydaje), której mi zawsze brakowało. Oparta na Systicku - trzeba tylko podać z jakim zegarem jest taktowany.

Do pobrania z gita:
https://github.com/dambo1993/STM_DMB_LI ... tick_delay
Zapraszam na mojego pseudobloga z projektami itp: http://projektydmb.blogspot.com/

Awatar użytkownika
inż.wielki
User
User
Posty: 274
Rejestracja: niedziela 20 gru 2015, 23:11

Re: [STM32] Zamiennik _delay_ms na Systicku

Postautor: inż.wielki » czwartek 02 lut 2017, 22:31

Co do tego że nie powinno się stosować, to też nie prawda. Powinno, ale w odpowiednich miejscach, ale też nie powinno się przesadzać z tym. Przecież wiadomo że nie wszystko da się zrobić bez używania takiego zatrzymania. Jeżeli jeszcze aplikacja jest pisana z wykorzystaniem RTOS'a albo innego systemu czasu rzeczywistego, to taki delay jest całkiem przydatny.

Awatar użytkownika
inż.wielki
User
User
Posty: 274
Rejestracja: niedziela 20 gru 2015, 23:11

Re: [STM32] Zamiennik _delay_ms na Systicku

Postautor: inż.wielki » piątek 03 lut 2017, 09:50

rezasurmar pisze:Po prostu w pętli głównej być tego nie powinno.


W większości się z Tobą zgadzam, jednak, bez wykorzystania delay'a w pętli głównej, jeżeli cała aplikacja działa z wykorzystaniem RTOS'a to procesor się zajedzie. Zwykły while(1) bez żadnego dileja nie pozwoli na płynne przełączanie tasków.

Awatar użytkownika
inż.wielki
User
User
Posty: 274
Rejestracja: niedziela 20 gru 2015, 23:11

Re: [STM32] Zamiennik _delay_ms na Systicku

Postautor: inż.wielki » piątek 03 lut 2017, 12:39

Procesora się nie zatrzymuje, ale wkładając petle while(1) w task, a to jest dość popularne i normalne, pozwalasz na przełączenie taska. Spróbuj sobie zrobić task i machnąć w min pętle nieskończoną, która nie będzie miała dileja, zobaczysz że mimo tego, inne taski się nie wykonają, sprawdziłem to. A nie mówię że się nie da inaczej, ostatnio napisałem oprogramowanie gdzie petla jest pusta a kod wykonuje się z przerwań. Ale to zależy od przeznaczenia i zadań dla oprogramowania.


Wróć do „Programowanie STM w C/C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości