Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 5 sty 2025, o 12:51


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 16 lip 2015, o 20:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 mar 2013
Posty: 64
Pomógł: 0

Istnieje coś takiego ? W sumie to interesuje mnie rozwiązanie także dla M0.

_________________
-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lip 2015, o 21:57 

Pomógł: 0

AVRowy ATOMIC BLOCK to tylko wyłączenie przerwań. W Cortexie też możesz wyłączyć... tylko po co.
Wszystko zależy co chcesz zrobić. Możesz np.:
- zablokować wyjątki do pewnego priorytetu (patrz PRIMASK)
- skorzystać z bit bandingu
- skorzystać z instrukcji ldrex/strex
- itd...

Wszystko zależy od tego, do czego Ci ten atomic potrzebny :)



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lip 2015, o 08:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 mar 2013
Posty: 64
Pomógł: 0

Potrzebuje tego do atomowego ustawiania i odczytywania programowego timera.

_________________
-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lip 2015, o 08:28 

Pomógł: 0

Jeśli timer programowy (zmienna) jest 32bitowy to operacje odczytu i zapisu są "niepodzielne", więc problemu nie ma :)
Jeśli musi być dłuższy to... w sumie nie wiem co by było najbardziej eleganckie - ja bym spłodził coś z ldrex/strex, ale niech się lepiej wypowie ktoś mądrzejszy ode mnie, żebym głupot nie nagadał.

Nic nie piszesz o języku, więc strzelam że C. Od wersji C11 jest też nagłówek <stdatomic.h> (klik), który pozwala definiować zmienne atomowe i "operować" nimi. Ale nie wiem jak to się spisuje w praktyce.

Dodano:

Jeszcze mi przyszło do głowy, że może Koledze chodziło nie tyle o samo ustawianie i odczytywanie co o np. inkrementację. Jeśli tak to również przyda się ldrex/strex. Atomowa inkrementacja:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


w sumie to samo można uzyskać korzystając z funkcji z stdatomic (np. atomic_fetch_add).

Co do M0 to się nie wypowiadam, bo to taka bida, że może nie mieć takich bajerów ;)


Autor postu otrzymał pochwałę


Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lip 2015, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 mar 2013
Posty: 64
Pomógł: 0

Dziękuję za odpowiedź :) W sumie to chodziło mi i o ustawienie, o dekrementowanie i sprawdzanie if(!timer). Wszystko co pozwoli napisać prostą libke do korzystania z timerów programowych. No właśnie z tym M0 to może być problem bo tam chyba nie ma instrukcji
ldrex/strex. Jeszcze to muszę sprawdzić.

Jak macie coś do dodania ciekawego to zachęcam :)

_________________
-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO