-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.P
OSTED!not-for-mail
From: Janusz <j...@o...pl>
Newsgroups: pl.misc.elektronika
Subject: Re: Zagwozdka w C Keil - wyjaśnienie.
Date: Thu, 14 Feb 2019 23:02:16 +0100
Organization: ATMAN - ATM S.A.
Lines: 88
Message-ID: <q44oha$liu$1@node2.news.atman.pl>
References: <q3q59d$hp9$1@node1.news.atman.pl> <q3vee4$o74$1@node1.news.atman.pl>
<5c63f185$0$476$65785112@news.neostrada.pl>
<e...@t...no1>
<y...@4...net>
<q424f8$8b4$1@node2.news.atman.pl>
<5c650c2f$0$5597$426a74cc@news.free.fr>
<5c6544d5$0$486$65785112@news.neostrada.pl>
<c...@t...no1>
<5c655b35$0$490$65785112@news.neostrada.pl>
<4...@t...no1>
NNTP-Posting-Host: 185.234.91.244
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: node2.news.atman.pl 1550181738 22110 185.234.91.244 (14 Feb 2019 22:02:18
GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Thu, 14 Feb 2019 22:02:18 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101
Thunderbird/60.5.0
In-Reply-To: <4...@t...no1>
Content-Language: pl
X-Antivirus: Avast (VPS 190214-4, 2019-02-14), Outbound message
X-Antivirus-Status: Clean
Xref: news-archive.icm.edu.pl pl.misc.elektronika:741042
[ ukryj nagłówki ]W dniu 2019-02-14 o 13:59, Queequeg pisze:
> J.F. <j...@p...onet.pl> wrote:
>
>>> 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)?
>>
>> To samo, co programista ma zrobic :-)
>
> Programista ma kontekst, którego nie ma kompilator. Programista wie, kiedy
> chce mieć sekcję krytyczną (która nie musi obejmować wyłącznie atomicznego
> dostępu do zmiennej szerszej niż magistrala adresowa).
>
>>> Zmienna może się zmienić między każdą z tych instrukcji.
>>
>> Cos w tym jest.
>
> Jest jest... po to są sekcje krytyczne.
>
>>> Czemu? Co ma do tego ARM? Chodzi o szerokość magistrali danych? To
>>> rozwiązuje tylko jeden problem,
>>
>> Tak, problemu z int nie bedzie :-)
>
> Z odczytem int nie, ale np. z read-modify-write już tak.
>
>>> ale inne (chociażby ten pierwszy przykład wyżej) pozostają.
>>
>> Ciezkie jest zycie programisty.
>
> A to swoją drogą... ale raczej przez ludzi a nie przez komputery :)
>
> Trzeba po prostu pamiętać, że (przynajmniej w przypadku C i C++)
> kompilator nie tłumaczy kodu na język maszynowy jeden do jednego. Kod to
> tylko pewien abstrakcyjny opis, który kompilator może traktować z dosyć
> dużą dowolnością. Dochodzą do tego chociażby zagadnienia związane z
> reorderingiem.
>
> Przykładowo:
>
> https://www.nongnu.org/avr-libc/user-manual/optimiza
tion.html
>
> 1. Dzielimy (powolna operacja)
> 2. Wyłączamy przerwania cli
> 3. Zapisujemy wynik dzielenia do zmiennej (szybka operacja)
> 4. Włączamy przerwania
>
> A optymalizator twierdzi, że wyłączy sobie przerwania przed dzieleniem, bo
> tak mu mnieszy kod wychodzi :)
Faktycznie tak robi, na całe dzielenie wył przerwania ale można ten
problem obejść :)
void test2( unsigned int val )
{div_t wynik;
wynik=div(65535U,val);
e10: bc 01 movw r22, r24
e12: 8f ef ldi r24, 0xFF ; 255
e14: 9f ef ldi r25, 0xFF ; 255
e16: 0e 94 f7 08 call 0x11ee ; 0x11ee <__divmodhi4>
return 1;
}
static __inline__ uint8_t __iCliRetVal(void)
{
cli();
e1a: f8 94 cli
//val = / val;
ATOMIC_BLOCK(ATOMIC_FORCEON) {
ivar = wynik.quot;
e1c: 70 93 14 02 sts 0x0214, r23 ; 0x800214 <ivar+0x1>
e20: 60 93 13 02 sts 0x0213, r22 ; 0x800213 <ivar>
return 1;
}
static __inline__ void __iSeiParam(const uint8_t *__s)
{
sei();
e24: 78 94 sei
Da się? da sie :) ale prawda jest taka że trzeba mu cały czas patrzyć na
ręce
czy nam czegoś nadmiernie nie zoptymalizował.
--
Pozdr
Janusz
Następne wpisy z tego wątku
- 14.02.19 23:03 Grzegorz Niemirowski
- 15.02.19 08:57 Mateusz Viste
- 15.02.19 11:07 J.F.
- 15.02.19 20:57 Irek.N.
- 15.02.19 20:59 Irek.N.
- 16.02.19 22:53 Queequeg
- 16.02.19 23:03 Queequeg
- 16.02.19 23:11 Queequeg
- 16.02.19 23:26 Queequeg
- 17.02.19 03:55 k...@g...com
- 17.02.19 09:16 Mateusz Viste
- 17.02.19 11:57 J.F.
- 19.02.19 13:14 Queequeg
Najnowsze wątki z tej grupy
- System operacyjny dla 6800?
- Przyłączenie działki do sieci elektrycznej
- Działalność nierejestrowana/definicja sprzętu elektronicznego/misie i kolejki
- Smukły, długi ściągacz izolacji do kynaru
- rezystor 3 omy 400W
- [newbie] Jaki multimetr za 2-4 stówy?
- szafka sieciowa
- Raspberry Pi 5 + dyski SATA
- lutownica na węgiel
- Znów czary (albo niewiedza) - tym razem fotowoltaika
- Chess
- Vitruvian Man - parts 7-11a
- przeźroczyste koszulki
- Re: Win 10/11 nie lubi OKI
- Programator czasowy TUYA.
Najnowsze wątki
- 2024-05-18 Warszawa => Mid PHP Developer (Laravel) <=
- 2024-05-18 Warszawa => Software .Net Developer <=
- 2024-05-18 Warszawa => Mid/Senior QA Engineer <=
- 2024-05-18 Ulm => Solution Architect (sichere Kommunikation und IoT-Loesungen <=
- 2024-05-18 Katowice => Head of Virtualization Platform Management and Operating S
- 2024-05-18 Warszawa => SAP WM Consultant / Execution <=
- 2024-05-18 Wrocław => Consultant/Implementer Comarch ERP XL <=
- 2024-05-18 Gdańsk => Head of International Freight Forwarding Department <=
- 2024-05-18 Warszawa => Account Manager (Recruitment Services) <=
- 2024-05-18 Łódź => Salesperson - CRM Systems <=
- 2024-05-18 Łódź => Handlowiec - Systemy CRM <=
- 2024-05-17 ZŁOMNIK o pracy w TVN TURBO, nowych przepisach i współczesnej motoryzacji. Turbo Taryfa!
- 2024-05-17 Białystok => DevOps Engineer Conexa First (Contractor) <=
- 2024-05-17 Warszawa => Starszy inżynier oprogramowania (Rust) <=
- 2024-05-17 Zabrze => Junior HelpDesk <=