-
Data: 2019-02-14 11:59:24
Temat: Re: Zagwozdka w C Keil - wyjaśnienie.
Od: q...@t...no1 (Queequeg) szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]J.F. <j...@p...onet.pl> wrote:
> Cos w tym jest, ale z drugiej strony - skoro uzywamy volatile, to
> wiadomo ze zmienna moze sie zmieniac w przerwaniach czy w inny
> niekontrolowany sposob, i co - kompilator to olewa ?
Ale co kompilator może zrobić, jak sam procesor nie obsługuje atomicznego
dostępu do tej zmiennej (bo np. jest 8-bitowy, a zmienna 16-bitowa)?
Zresztą nawet w przypadku zmiennych o rozmiarze równym szerokości
magistrali danych nie ma gwarancji chociażby w przypadku operacji
read-modify-write. Przykład:
#v+ test.c
volatile int i;
void fn(void) { ++i; }
#v-
#v+ test.s
ldr r3, [r2] ; odczyt zmiennej z pamięci do rejestru r3
add r3, r3, #1 ; dodanie do rejestru r3 liczby 1
str r3, [r2] ; zapis rejestru r3 z powrotem do pamięci
#v-
Zmienna może się zmienić między każdą z tych instrukcji.
Bardziej realny przykład, AVR. Chcemy zmienić stan bitu 2 w porcie na
przeciwny.
#v+ avr.c
#include <avr/io.h>
void fn(void) { PORTB ^= _BV(2); }
#v-
Kompilacja: avr-gcc -mmcu=atmega8 -O2 -S avr.c
#v+ avr.s
in r24,0x18 ; załadowanie adresu portu do r24
ldi r25,lo8(4) ; załadowanie wartości _BV(2) do r25
eor r24,r25 ; wykonanie r24 xor r25, zapis do r24
out 0x18,r24 ; wysłanie wartości z r24 do portu
#v-
Między każdą z tych instrukcji również może wystąpić przerwanie, które np.
ustawi inny bit w tym porcie, który to bit zostanie ładnie wyczyszczony
podczas otatniej operacji (zapisu r24 do portu).
> No coz, przejsc na ARM i zapomniec o problemie ...
Czemu? Co ma do tego ARM? Chodzi o szerokość magistrali danych? To
rozwiązuje tylko jeden problem, ale inne (chociażby ten pierwszy
przykład wyżej) pozostają.
--
Eksperymentalnie: http://facebook.com/groups/pl.misc.elektronika
Następne wpisy z tego wątku
- 14.02.19 12:14 Queequeg
- 14.02.19 13:07 J.F.
- 14.02.19 13:11 J.F.
- 14.02.19 13:15 J.F.
- 14.02.19 13:25 Queequeg
- 14.02.19 13:36 Grzegorz Niemirowski
- 14.02.19 13:52 a...@m...uni.wroc.pl
- 14.02.19 13:59 Queequeg
- 14.02.19 14:01 Grzegorz Niemirowski
- 14.02.19 14:02 Queequeg
- 14.02.19 14:04 Queequeg
- 14.02.19 14:07 Queequeg
- 14.02.19 17:03 J.F.
- 14.02.19 17:10 J.F.
- 14.02.19 17:14 Queequeg
Najnowsze wątki z tej grupy
- Zasilacz USB na ścianę.
- Gniazdo + wtyk
- Aliexpress zaczął oszukiwać na bezczelnego.
- OpenPnP
- taka skrzynka do kablowki
- e-paper
- 60 mA dużo czy spoko?
- Dziwne zachowanie magistrali adresowej w 8085
- Współczesne mierniki zniekształceń nieliniowych THD audio, produkują jakieś?
- Jaki silikon lub może klej?
- Smar do video
- Litowe baterie AA Li/FeS2 a alkaliczne
- "ogrodowa linia napowietrzna"
- jaki zasilacz laboratoryjny
- jaki zasilacz laboratoryjny
Najnowsze wątki
- 2025-02-27 potwierdzenie notarialne dokumentow tozsamosci ze zdjeciem
- 2025-02-27 Warszawa => Account Manager - Sprzedaż Usług Rekrutacyjnych <=
- 2025-02-27 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-02-27 Warszawa => Mid IT Recruiter <=
- 2025-02-27 Warszawa => Expert Recruiter 360 <=
- 2025-02-27 Warszawa => Junior Rekruter <=
- 2025-02-27 China-Kraków => Key Account Manager IT <=
- 2025-02-27 Warszawa => Sales Assistant <=
- 2025-02-27 Kraków => Frontend Vue Developer <=
- 2025-02-27 Re: Zwolniony z IKEA za "wąty" przeciw firmowej promocji LGBT-IQ+ przywrócony do pracy - SN odrzucił kasacje (sygn. akt I PSK 62/24)
- 2025-02-27 Częstochowa => Manager ds. produktu <=
- 2025-02-27 Warszawa => Business Systems Analyst <=
- 2025-02-27 Nagranie poglądowe
- 2025-02-26 Zasilacz USB na ścianę.
- 2025-02-26 Błonie => Specjalista ds. public relations <=