Wgdy nie używać zmiennoprzecinkowych
Pierwszą rzeczą, którą należy sobie uświadomić, jest to, że zmiennoprzecinkowy nie oznacza "Potrzebuję liczb dziesiętnych". To jest sytuacja, w której około 95% wszystkich potencjalnych programistów wbudowanych niewłaściwie wykorzystujących zmiennoprzecinkowe zawodzi.
Lekarstwem na to niedowierzanie jest uświadomienie sobie, że wewnętrznie program powinien używać jednostki, która ma sens dla MCU , a nie takiej, która ma sens dla ludzi.
Na przykład, jeśli mierzysz prąd w mA za pomocą 10-bitowego przetwornika ADC na chipie, wygodną jednostką do wykorzystania w oprogramowaniu są „stałe, surowe wartości ADC od 0 do 1024”. W programowaniu w C oznacza to uint16_t
lub opcjonalnie uint_fast16_t
. Nie int
i na pewno nie float
.
Używanie jednostki mA w obliczeniach oprogramowania sprzętowego jest wygodne tylko dla mózgu programisty, na wypadek gdyby nie mógł obsługiwać abstrakcyjnych jednostek. Jest to jednak niewygodne dla programu, ponieważ oznacza, że trzeba przeskalować wszystkie odczyty i potencjalnie dodać niedokładność zaokrągleń. Dodatkowo kod skalujący to po prostu nadmiar narzutu. Prawdopodobnie będzie to obejmować podział, który może być bolesny dla wielu MCU.
Tak, odczytujesz prąd w mA. Ale jeśli faktycznie nie musisz drukować tego prądu na wyświetlaczu lub czymś dla człowieka, jednostka ta nie jest w rzeczywistości pomocna. Wykonaj ponowne skalowanie mA na długopisie i papierze podczas projektowania algorytmu, zamiast przeciągać go do oprogramowania układowego.
Wiedy używa się zmiennoprzecinkowych
- Jeśli Twój MCU ma FPU i faktycznie potrzebujesz zaawansowanej matematyki , powinieneś użyć liczb zmiennoprzecinkowych. W przeciwnym razie nie powinieneś.
„Zaawansowana matematyka” niekoniecznie oznacza zaawansowaną z punktu widzenia programisty, ale z punktu widzenia oprogramowania.„Zaawansowane” obejmuje takie rzeczy, jak pierwiastki kwadratowe, geometria lub trygonometria, ogólnie użycie math.h
, liczby zespolone, matematykę sztucznej inteligencji itp. Rzeczy, które byłyby trudne do wdrożenia w punkcie stałym.