Optymalizacja kodu Bascom

Twoja opinia, jest ważna dla mnie!

Czyli pamięci flash przybywaj .. 😎

Optymalizacja kodu Bascom, to może bardzo duże słowa, niemniej zwrócę uwagę na kilka istotnych aspektów dzięki którym, można upchnąć zamierzony cel do pamięci flash. Czasem, może być to nie lada wyczyn.

Objętość wynikowego kodu, który utworzy kompilator zależy od różnych czynników. Ma na nią wpływ ilość i typ zmiennych i operatorów, dlatego typy należy dobierać optymalnie zależnie od potrzeby. W zależności od objętości typu, może on zajmować od jednego bita do czterech bajtów, zarówno pamięci RAM jak i Flash. Przy czym w drugim wypadku bit stanowi wyjątek ponieważ upychany/sklejany jest w bajty.

Ale … operacje na bitach generują o wiele większy kod wynikowy niż operacje na bajtach, pochłaniają za to mniej zasobów pamięci RAM. Coś za coś … Oszczędność kodu wynikowego po zmianie typu z bit na bajt wynosi 10b. Przy prostych przypisaniach wartości zero i jeden.

Warto zwrócić uwagę na to aby minimalizować dzielenie i mnożenie przez dwa i jego potęgę. Zastępujemy je przesunięciem bitowym w prawo (dla dzielenia) lub lewo (dla mnożenia). Bardzo duże znaczenie ma, gdy operatorami są liczby kilkubajtowe. służy do tego polecenie SHIFT o składni SHIFT var , LEFT/RIGHT[ , shifts] [,SIGNED] gdzie:
var – zmienna typu Byte, Integer/Word, Long lub Single
LEFT/RIGHT – kierunek przesunięcia
shifts – ilość kroków przesunięcia do wykonania
Pomagając kiedyś koledze Chester w rozwiązaniu jego problemu (budował termometr na DS18B20), zastosowałem właśnie przesunięcie w obliczeniach, zaoszczędziło to ponad 100B kodu. Miałem oczy jak pięć złotych i gębę w kształcie banana.

Kolejną możliwością zaoszczędzenia na objętości kodu, jest eliminowanie złożonych warunków w instrukcjach warunkowych. Można je zastąpić następującymi po sobie osobnymi instrukcjami, bądź  obmyślić warunek lepiej.

Gdy już mamy nóż na gardle można przyoszczędzić następne ~10B przełączając dyrektywę odpowiedzialną między innymi za zerowanie zmiennych, przy starcie programu i µC. Trzeba tu pamiętać o konsekwencjach tej operacji, brak wstępnego zerowania zmiennych. Przełącznikiem tym jest: $noramclear.

Z ciekawych rozwiązań interesującą jeszcze była alternatywna biblioteka do obsługi LCD znakowych. Niestety nie potrafię sobie przypomnieć teraz jej nazwy. A szkoda. Gdy sobie przypomnę na pewno napiszę o tym – bo warto. Nie była to biblioteka lcd4busy, która zapewnia o wiele wydajniejszą obsługę wyświetlacza LCD, i wymaga podłączenia linii RW do µC.

AD2013-11-24 W końcu buszując w archiwum kodów znalazłem, jest to biblioteka o nazwie lcd4.lbx, aby z niej skorzystać musimy dołączyć do kodu dyrektywę

Ewentualnie przed nazwą bibliotek trzeba dodać ścieżkę do lokalizacji pliku jeżeli ten znajduje się w innym katalogu niż domyślny. Więcej uwag o tej bibliotece na stronie MCS Electronics, jest tam również zawarta wzmianka o większych wyświetlaczach zbudowanych na dwóch sterownikach np 20×4, one też mają swoją wersję tej biblioteki. dzięki niej jesteśmy w stanie zaoszczędzić kilka po wyżej 100B. 😯

AD2013-11-26 Omawiając alternatywne biblioteki watro również wspomnieć o 😉 znowu o bibliotece tym razem do obsługi I²C. Jest to i2c_twi.lbx, by z niej skorzystać, należy w kodzie umieścić następującą instrukcję:

 Tak że, na kilku przedstawionych przykładach widzimy, że optymalizacja kodu Bascom to szerokie pojęcie i ma na nią wpływ wiele czynników, począwszy od programisty – ten może uczynić najwięcej w tym zakresie, a skończywszy na ulepszonych bibliotekach. Niemniej należy tu wspomnieć o konsekwencjach tych ulepszeń, przywiązani jesteśmy do ściśle określonych pinów. Optymalizacja kodu Bascom nie jest prostą sprawą, ale warto przywiązywać do niej uwagę, można nauczyć się w ten sposób zwięzłego pisania kodu. Napweno to zaprocentuje na szybkości wykonywania kodu i przejrzystości programu. Posługując się skrótem klawiszowym Ctrl+W w środowisku Bascom AVR mamy do wglądu ciekawe statystyki łącznie z listą nie używanych zmiennych – na końcu raportu.

A.D. 2014-05-08 Dodatkowy sposób na optymalizację opisałem również w nowym temacie: Operacje na bitach w BASCOM – jak maskować lub ustawiać wybrane bity

A.D. 2014-06-25 Kolejny sposób na odchudzenie binarki. Do wykorzystania gdy używamy funkcji STR, do konwersji liczby (wartości numerycznej) na ciąg znaków (string). W przypadku kiedy nie potrzebujemy konwertować typów zmiennoprzecinkowych można zastosować alternatywną bibliotekę o nazwie mcsbyteint.lbx. Gdy w użyciu są tylko zmienne z zakresu byte wtedy warto zainicjować bibliotekę mcsbyte.lbx. I mamy piękny sposób na optymalizację kodu ;-D

I jeszcze jeden istotny „patent”. Dla mnie tak oczywisty, że przestałem uważać go jak coś nadzwyczajnego i uciekł uwadze … Bardzo chętnie stosuję funkcję Incr i Decr zamiast używać instrukcji np

oprócz tego, że kod nie puchnie strasznie gdy używamy typów zmiennych wielobajtowych, to … 😉 Szkoda, że w tym języku programowania nie ma możliwości zadawania kroku inkrementacji bądź dekrementacji.

A.D.2014-07-20 Dziś znowu grzebałem przy „starym kodzie” i odniosłem sukces – tym razem zupełnie niezamierzony … potem zacząłem przeglądać dyrektywy kompilatora ;-D i bardzo dobrze. Dwie szczególnie przykuły moją uwagę …
Pierwsza $NOINIT, chymmm uzysk 48 bajtów lecz skutki nieznane zważywszy na wagę opisu ….
Druga TO $EEPROM – jeżeli w kodzie została użyta instrukcja Data z tanymi czerpanymi w trakcie pracy można przemyśleć czy nie użyć tej dyrektywy. Spowoduje ona zapisanie tych danych w pamięci EEPROM. Tak jak zaznaczyłem sprawę trzeba dobrze przemyśleć gdyż obsługa tego typu pamięci również generuje znaczną ilość binarki.

A.D. 2015-09-05 Od kilku tygodni posługuję się programem NoSave Tools. I trzeba powiedzieć, że to świetne narzędzie jest. Przy używaniu przerwań pozwala wygospodarować znaczną ilość miejsca na kod … i to nie wszystkie zalety tego programu 🙂

CDN

Otagowano , , , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

dwanaście + dwa =

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.