Ruszyła promocja na kurs Asembler w Embedded!

Kategoria: Asembler

Czy ręcznie napiszemy kod optymalniej niż kompilator?

Istnieje taki mit, że jeżeli chcemy napisać mega optymalny kod, gdzie liczy się każda instrukcja – powinniśmy napisać go ręcznie w asemblerze. Kompilator nie poradzi sobie z tym zadaniem tak dobrze jak człowiek. Zawsze doda jakieś bezsensowne instrukcje trwoniąc w ten sposób cenny czas.

Ja się z tym całkowicie nie zgadzam i w swoich materiałach często pokazuję jak kompilator robi różne optymalizacje, a nam się nie udaje go pobić. Albo kiedy ręcznie robimy w kodzie błędy, a kompilator generuje kod poprawnie. Nie inaczej będzie tym razem, ale nie uprzedzajmy faktów.

Sam wielokrotnie łapałem się na tym, że posądzałem kompilator o bezsensowne działanie. A potem okazywało się, że nie miałem racji. Dlatego teraz staram się nie rzucać przedwcześnie oskarżeń. Z drugiej strony widzę, że nie byłem sam. Pod moimi materiałami nieraz pojawiają się dyskusje o bezsensownych optymalizacjach kompilatora. I zwykle staję wtedy w obronie maszyny.

W dzisiejszym artykule pokażę Case Study przypadku, gdzie kompilator GCC na ARM Cortex-M robi dziwne i “nieoptymalne” operacje.

Continue reading

Debugowanie Hard Faultów na STM32

Pracujemy nad naszą aplikacją, wgrywamy ją na procka, uruchamiamy i nie działa. Uruchamiamy debug i widzimy, że program wchodzi do Hard Faulta. Co teraz?

Na szczęście w STM32 mamy całkiem bogate możliwości sprawdzenia, co dokładnie się wydarzyło. Co więcej – to samo aplikuje się do dowolnych innych ARMów z rdzeniem Cortex-M. W tym artykule pokażę Ci przydatne informacje, do których możesz dotrzeć w debugu.

Skupię się na rdzeniu Cortex-M4, ale podobne mechanizmy znajdziesz w każdym innym Cortexie-M. A jako dokumentacja posłuży mi STM32 Cortex-M4 Core Programming Manual. Znajdziesz go na stronie ST.

A więc zaczynamy.

Continue reading

6 Najważniejszych zastosowań asemblera w Embedded

W poprzednich wpisach wychwalałem wartość edukacyjną asemblera i opowiadałem trochę jak wyglądała moja ścieżka nauki. Dzisiaj porozmawiamy sobie o praktycznych zastosowaniach, gdzie faktycznie musimy pisać, albo przynajmniej czytać kod pisany w asemblerze.

Opowiem o 6 głównych przypadkach, kiedy chcemy użyć asemblera. I o jednym kiedy wydaje nam się, że chcemy, ale… no właśnie – źle nam się wydaje.

Continue reading

Czy warto uczyć się asemblera w 2024 roku?

Asembler wśród programistów nie budzi zbyt wielkiej sympatii. Pewnie znasz kilka stereotypowych opinii:

  • Że jest trudny do nauki.
  • Że powstały kod jest zupełnie nieczytelny, szczególnie kiedy wracamy po pół roku.
  • Że jest przestarzały i w dzisiejszych czasach możemy się obejść bez niego.
  • Że ma inną składnię na każdą rodzinę procesorów.
  • Że poza językiem musimy mieć dużą wiedzę o architekturze danego procesora.
  • Że nie ma sensu w nim pisać całego projektu.

Co więcej – większość z tych zdań jest prawdziwa!

Ale i tak postaram się przekonać Cię, że warto nauczyć się asemblera. Oczywiście jeśli spełnimy pewne założenia. Moim zdaniem asembler nie nadaje się jako pierwszy język do nauki, ani główny język w projektach. Ale jest idealny jako uzupełnienie i tak powinieneś go traktować.

Continue reading