Czy Arduino jest zmęczone zbyt dużą liczbą poleceń?

12

Przepraszam, jeśli to głupie pytanie, ale nie mogłem znaleźć odpowiedzi.

Przez jakiś czas zastanawiałem się, czy Arduino (lub ogólnie dowolny inny mikrokontroler) cieszy się, jeśli kod jest lekki i nie musi wykonywać zbyt wielu operacji. Czy kod, który ma zbyt wiele ifs, zbyt wiele pętli i wszelkiego rodzaju skomplikowane obliczenia, zużywa Arduino wcześniej niż kod, który tylko miga diodą LED?

ahmadx87
źródło
Zobacz także powiązane pytania . . . .
James Waldby - jwpat7

Odpowiedzi:

20

Nie, kod nie „zużywa” MCU. Zasadniczo bez względu na to, co robisz, wykonywany jest z grubsza ten sam poziom aktywności. Nawet delay()wykonuje dużo pracy, gdy jest „na biegu jałowym”.

Istnieją polecenia, które zmniejszają wydajność procesora - ustaw go w trybie bezczynności lub w trybie SLEEP - ale służą one do oszczędzania energii, a nie do zmniejszania „zużycia” MCU.

Oczywiście są pewne rzeczy, które mają ograniczony okres użytkowania i możesz używać ich tylko ograniczoną liczbę razy - takich jak pisanie do EEPROM i pisanie do pamięci Flash - więc nie chcesz robić tego przez cały czas. Poza tym nie, nie ważne, co robisz, nie zużywa MCU.

Majenko
źródło
2
Ale wszystkie półprzewodniki starzeją się, prawda? pamiętam wtrysk gorącego nośnika i niestabilność temperatury nastawienia. Oczywiście zajęłoby to wiele lat.
MV.
5
@MV. Tak, ale to, co uruchamiasz na mikrokontrolerze, tak naprawdę na to nie wpływa. Cokolwiek robisz, procesor działa na (z grubsza) tym samym poziomie. Cały czas używasz tego (prawie).
Majenko
1
Czy kod nie wpłynie pośrednio na generowane ciepło? Gorące elementy mogą szybciej się zużywać.
Maszt
3
Tylko bardzo mała, niewielka ilość. Nawet gdy „nic nie robi”, ciężko pracuje i przetwarza.
Majenko
Dziękuję za odpowiedź. Teraz mogę się oprzeć i pisać kody tak złożone, jak chcę i nie martw się o długość życia mojego Arduino! Ale czy dotyczy to również ciągłej interakcji z komponentami zewnętrznymi? Czytanie czujników, komunikacja SPI i tak dalej?
ahmadx87
6

To nie jest. Cóż, może się powoli zużywać, jeśli uruchomisz go przez 20 lat ... (jak większość innych fizycznych produktów)? Przynajmniej nie opiera się na złożoności kodu, ale ile operacji zapisu wykonano w tej samej sekcji pamięci. Co więcej, gdy się zużyje, zostanie po prostu zamurowany i nie stanie się prostszym kodem, takim jak miganie diody LED.

Arduino (Uno) ma trzy części pamięci. SRAM, FLASH i EEPROM. SRAM jest bardziej logiczną bramką tranzystorową. Nie zużyje się, przechowując zmienne. FLASH i EEPROM składają się z pływających bram. Powoli zużywają się, gdy zapisujesz nowe dane. Z arkusza danych mikrokontrolera Ateml stwierdza:

Pamięć flash ma wytrzymałość co najmniej 10 000 cykli zapisu / kasowania. (Z rozdziału 8.2)

EEPROM ma wytrzymałość wynoszącą co najmniej 100 000 cykli zapisu / kasowania. (Z rozdziału 8.4)

Jednak pamięć FLASH to przestrzeń do wykonywania kodu. Operacja zapisu nie jest wykonywana podczas działania Arduino. Pamięć FLASH zapisuje się tylko podczas przesyłania nowego kodu. Więc zużyje się, gdy prześlesz kod co najmniej 10.000 razy.

Jeśli naprawdę chcesz, możesz utworzyć specjalny kod do przeprogramowania pamięci FLASH, zwykle w celu przechowywania zmiennych danych, gdy Arduino jest wyłączony. Gdy napiszesz tego rodzaju program, zużyje się powoli, ponieważ pamięć FLASH nie ma dużej wytrzymałości na pisanie. Dlatego zostaniesz poproszony o użycie pamięci EEPROM, która ma znacznie dłuższą żywotność, jeśli chcesz zachować dane nawet po wyłączeniu Arduino.

Podsumowując, zużyje się przez ponowne zapisanie pamięci FLASH lub EEPROM, a nie przez wykonanie kodu.

Bumsik Kim
źródło
6

Dla hobbysty:

Jedynym problemem związanym z oprogramowaniem ograniczającym życie może być zapisywanie do pamięci FLASH tak szybko, jak to możliwe, z poziomu programu. Jednak niewiele programów wykorzystuje zmienne, które muszą przetrwać zdarzenia, takie jak wymiana baterii.

Jedynym problemem związanym ze sprzętem ograniczającym żywotność jest przeładowanie wyjść niskimi obciążeniami rezystancyjnymi (żarówki), obciążeniami indukcyjnymi (jak bezpośrednie sterowanie przekaźnikami mechanicznymi), żeby wymienić tylko dwa. Ale pytanie dotyczy tylko oprogramowania.

st2000
źródło
5

... (lub ogólnie każdy inny mikrokontroler) ...

Inne odpowiedzi są świetne, ale jest jeden mały wyjątek.

Ferroelektryczna pamięć RAM (FRAM) to forma pamięci, która łączy w sobie nieulotność pamięci flash i pamięci EEPROM, możliwość zapisu SRAM oraz gęstość pamięci DRAM.

Jednak operacje odczytu na pamięci FRAM niszczą dane przechowywane w pamięci FRAM, a operacje zapisu niszczą samą konstrukcję pamięci FRAM (a ponieważ dane są niszczone przez odczyt, należy je każdorazowo zapisywać ponownie). Jeśli kod znajduje się w pamięci FRAM, uruchomienie go z czasem zużyje MCU. Ale biorąc pod uwagę, że FRAM ma wytrzymałość na zapis w milionach miliardów, jest mało prawdopodobne, że MCU przestanie działać z powodu FRAM w czasie życia urządzenia.

Przykłady MCU korzystających z FRAM obejmują linię MSP430FRxx firmy TI .

Ignacio Vazquez-Abrams
źródło
1
Ogólnie, jeśli jest pamięć FRAM, nie ma innej pamięci. Nawet flash.
Majenko
3

Prawdopodobnie nie ... Układ Atmel może się z czasem nagrzewać (nawet opóźnienie tego nie zapobiega), jednak jeśli ma możliwość uwolnienia ciepła, nie widzę problemu. Ale przeważnie tylko podkręcanie może powodować naprawdę poważne problemy lub używanie Arduino w całkowicie zamkniętym pudełku lub w gorącym otoczeniu.

Dla porównania: wiele komputerów działa od lat bez wyłączania, w tym sensie Atmel (chip) nie ma różnicy, o ile generowane ciepło może zostać uwolnione.

Możesz przeczytać więcej o czujniku ciepła w Atmos tutaj: Wewnętrzny czujnik temperatury

Michel Keijzers
źródło
2
Arduino implementuje opóźnienie poprzez ciągłe sprawdzanie, czy minęło wystarczająco dużo czasu. Więc uruchamianie programu lub delaykorzystanie z takiej samej mocy obliczeniowej.
Gerben
Zaktualizuję (usunę) tę część ... dzięki!
Michel Keijzers
Jest różnica - większość komputerów ma dziś mnóstwo funkcji oszczędzania energii; wiele rzeczy wyłącza się, gdy nie są potrzebne, a dzieje się to prawie automatycznie. Arduino ma również sposoby na zmniejszenie zużycia energii, ale musisz ich użyć jawnie. Jeśli potrzebujesz czegoś, co przez większość czasu jest wyłączone , learn.sparkfun.com/tutorials/reducing-arduino-power-consumption to świetny sposób na rozpoczęcie. W szczególności sen niskiej mocy obniża zużycie energii około tysiąckrotnie - w przeciwieństwie do tego delay, który po prostu obraca procesor. Ma to oczywiście swój koszt :)
Luaan