Gömülmüş sistemlər (ing.Embedded System) mikrokontrollerli sistemlər olub, xüsusi funksiya yerinə yetirən, mexaniki, elektrik və elektro-mexaniki sistemlərin içərisinə yerləşdirilmiş, xüsusitəyinatlı kompüter sistemləri başa düşülür. Bəs bu sahədə uğur qazanmaq istəyən birisi nələri bilməlidir?
- Ümumi kompüter arxitekturası
- C proqramlama dili (sonra C++)
- İşlədiləcək platforma (Arduino, Raspberry Pi, STM32, RISC-V və s.)
- İşlədiləcək prosessor arxitekturası (AVR, PIC, ARM və s. )
- İşlədiləcək mikrokontrollerin məlumat vərəqini (datasheet) oxumaq bacarığı
- Baza elektronika bilikləri (bir elektronika mühəndisi qədər olması lazım deyil əlbəttə)
- Sözsüz ki, texniki ingliscə
Kompüter Arxitekturası
Kompüter arxitekturası – dedikdə kompüterin əmrləri necə icra etməsi, yaddaşın idarə olunması, giriş-çıxışın təşkili, bir sözlə, kompüterin necə işləməsi başa düşülür. Bizlər(Embedded Systems Proqramçıları) mümkün qədər maşın dilinə yaxın işlədiyimiz üçün, kompüter arxitekturasını bilməyimiz mütləqdir.
Məsələn, aşağıdakı rəsimdə AVR mikroprosessorunun(ya da nüvəsinin, hansı ki, Arduino da bu arxitektura üzərində qurulub) quruluşunu görürük. (İlk dəfə baxanda məni ağlamaq tutmuşdu 😀 ). Arithmetic Logic Unit (ALU), Program Counter (PC), Instruction və b. anlayışların nə olduğunu bilmədən bu sxemdən nəsə başa düşməyə çalışmaq, sözsüz ki, səmərəsizdir.
İndi isə Microchip PIC arxitekturasına ötəri nəzər yetirək. Rəsmin özü PIC16F874 mikrokontrollerinin blok-diaqramıdır. İşarələdiyim hissə isə həmin mikrokontrollerin PIC arxitekturası ilə dizayn olunmuş nüvəsidir (Bu mövzular barədə gələcəkdə daha ətraflı danışacıq).
Burda əsas izah etmək istədiyim şey iki fərqli arxitekturada da ALU, Program Counter, Instruction və s. kimi kompüter arxitekturasına aid anlayışların olmasıdır. Yəni, bunlar bizə hər zaman lazım olacaq təməl anlayışlardır. Beynimizdə mikroprossessorun, kompüterin əsas işləmə konsepti bir dəfə formalaşsa, istənilən mikrokontrolleri işlətməyi öyrəmək elə də çətin olmayacaq.
Bəs kompüter arxitekturasını necə öyrənək? Başlanğıc üçün mənim ən çox bəyəndiyim 2 kitabı məsləhət görəcəm:
- Inside the Machine: An Illustrated Introduction to Microprocessors and Computer Architecture – Jon Stokes
- Digital Design and Computer Architecture – David A. Harris and Sarah L. Harris
Əlbəttə ki, türkcə və rusca materiallar da var, amma mən ingliscə materiallardan öyrənməyi daha çox sevirəm. Bu haqda bildiyiniz faydalı materiallar varsa bizimlə də bölüşməyinizi istəyərik 🙂 .
C proqramlaşdırma dili
C proqramlaşdırma dili Dennis Ritchie tərəfindən 1972-ci ildə yaransa da, hələ də günümüzə qədər gəlib-çıxan və aktuallığını müəyyən sahələrdə qoruyub-saxlaya bilmiş proqramlama dilidir. İlk başlarda Unix əməliyyat sistemi üçün yaransa da sonradan populyarlıq qazanmışdır. Bunun əsas səbəblərindən biri yaddaş və performans kritik olan sistemlər üçün ideal olmasıdır. Embedded Systems`də kilobaytlarla yaddaşdan, qiqaHerslərlə deyil, meqaHerslərlə işçi tezliyindən söhbət getdiyi üçün “assembly” dilində proqramlamadan sonra bu sahə üçün ən optimal proqramlaşdırma dili kimi hesab olunur. Məsələn, NASA-nın kosmik missiyalarında istifadə etdiyi Curiosity Rover RAD750 prosessorunun kodu da C dilində yazılıb 🙂 .
İşlədiləcək platforma (Arduino, Raspberry Pi, STM32, RISC-V və s.)
Hər platformanın özünə məxsus təchizatı (development boards), proqram təminatı (Integrated Development Environment – IDE), istifadə olunan proqramlaşdırma dili, istifadə sahəsi və onun həvəskarlarından ibarət bir cəmiyyət -“community” var. Mən filan platformanı yaxşı bilirəm demək həmin platformanın təchizat və proqram təminatını yaxşı bilmək mənasına gəlir. Elə burada hansı yaxşıdır və ya hansından başlayım tipli suallar yaranır.
- Hansı platforma yaxşıdır? – Bu sual əslində daha ətraflı olmalıdır. Məsələn, görüntü emalı(image processing) və qrafik həllər üçün hansı platforma yaxşıdır?
Bu suala Raspberry Pi və ya daha professional olacaqsa STM32F4 seriyası olaraq cavab vermək olar. Başqa bir nümunə:
- Mən bir GPS izləmə cihazı düzəltmək istəyirəm, hansı platforma ilə edə bilərəm?
Bu daşınabilən bir cihaz olacağından, enerjiyə qənaət lazım olduğundan və çox funksionallıq lazım olmadığından AVR, ARM Cortex M0+ və ya PIC arxitekturalı mikrokontroller işimizi artıqlaması ilə görəcək. Nəticə olaraq,hamısının yaxşı ola biləcəyi öz sahəsi var heç biri ən üstün deyil.
- Hansından başlayım?
Sadəcə başlayın. Başladıqdan sonra onsuzda davamı özü gələcək və başlamaq haqqında olan bütün suallarınız öz cavabını tapacaq 🙂 .
Məncə, sıfırdan başlayan üçün Arduinodan başlamaq, sonra arduinonun necə işlədiyini başa düşmək üçün AVR ilə məşğul olmaq, bir müddətdən sonra isə, 32-bitlik ARM arxitekturalı sistemlərlə işləməyə keçmək lazımdır.(Şəxsən mən bu yolu izləyirəm)
Bu haqda bu videonu da izləməyinizi tövsiyə edirəm:
İşlədiləcək prosessor arxitekturası (AVR, PIC, ARM və s. )
Əslində, bu başlıq İşlədiləcək Platforma ilə əlaqəlidir. Burada bəzi məlumatları verməliyəm:
Bütün Arduino dövrə kartları (Arduino DUE kimi 1-2 model istisna olmaqla) üzərindəki mikrokontroller AVR nüvəsi üzərində qurulub. Raspberry Pi üzərindəki BCM2835 ARM nüvəsi üzərində qurulub.
STM32 seriyalı mikrokontrollerlər, Texas Instruments-in istehsal etdiyi LaunchPad ailəsinin prototipləşdirmə kartları və b. da ARM nüvəsi əsasında qurulub. Yəni, siz hansı nüvənin arxitekturasını (onu necə işlədəcəyinizi) bilsəniz, eyniadlı arxitekturanı işlədən platformaya da keçid çətin olmayacaq.
İşlədiləcək mikrokontrollerin məlumat vərəqini (datasheet) oxumaq bacarığı
Datasheet hər hansı elektronik komponent haqqında istehsalçının nəşr etdirdiyi məlumat kitabçasıdır. Məsələn,burada 1n4001 yarımkeçirici diodunun datasheeti verilib. Gördüyümüz kimi, burada diodun bütün xarakteristikaları verilib və başqa yerdə belə ətraflı məlumat tapmaq çətin məsələdir. Həmin söhbət mikrokontrollerlərə də aiddir. Məsələn ARDUINO UNO-nun mikrokontrolleri olan ATmega328p-nin datasheetinə baxsaq, haqqında hər cür məlumatın verildiyini görərik. AVR öyrənmək üçün olan dərsliklərin çoxu da elə bu datasheetdən istinad alınaraq yazılır.
Burada bir məqamı da bildirmək istəyirəm ki, datasheeti başa düşmək üçün təkcə ingliscə başa düşmək bəs etmir. Yuxarıda bəhs etdiyim kompüter arxitekturası və elektronika bilikləriniz də olmalıdır ki, terminləri anlaya biləsiniz. Çünki istehsalçı burada öz malı haqqında bəhs edir və elektronikaya aid hansısa konseptləri başa salmaq məcburiyyətində deyil.
Baza Elektronika Bilikləri
Əgər Embedded Systems-in proqram təminatı hissəsilə məşğul olacaqsınızsa, elektronika bilikləri də sözsüz ki lazım olacaq. Embedded Systems mühəndisi də əsas fərqləndirən cəhət budur. Bu mövzudan danışanda ağlıma həmişə bu hekayə gəlir:
Biz bir layihə üzərində işləyərkən, cihazın sxemini qurarkən tranzistoru səhv qoşduğumdan mikrokontrollerin pinindən +5v çıxış verən kimi dövrə qısa qapanacaqdı 😀 .Yaxşı ki, sırf elektronika ilə məşğul olan komanda yoldaşım problemi mənə vaxtında bildirdi.
Yəni bir elektronika mühəndisi qədər bilib həmdə proqram hissəsilə məşğul olmaq o qədər mümkün deyil. Elektronika haqqında bilikləriniz heç olmasa proqram hissəsi haqqında bildiklərinizin yarısını təşkil etməlidir ki yuxarıda qeyd etdiyim hekayə sizin də başınıza gəlməsin.
Texniki İngilicsə
Bu sahə haqqında hələ azərbaycanca material görməmişəm(görsəm sevincdən kövrələrəm). Mənim oxuduğum materialların 80%-i ingliscə qalanı isə, türkcə materiallardır. Türkcə materialların da çoxunun yola-verdi oluğunu, ordan-burdan çırpışdırıb yazıldığını da qeyd etməliyəm. Türkcə oxuduğum ətraflı materialların isə yazıçıları, həmin materialı yazacaq səviyyəyə gəlmək üçün çoxlu ingliscə material oxuduğundan və referans aldığından əminəm.
Datasheet məsələsinə gəldikdə isə onları da başa düşmək üçün yenə ingliscə bilməyiniz tələb olunur.
Belə…Bu çətin və bir o qədər də maraqlı sahədə özünü inkşaf etdirmək istəyən hər kəsə uğurlar arzulayıram. Özüm professional olmadığım üçün və yolun çox başlanğıclarında olduğum üçün müəyyən səhvlər ola bilər. Bu barədə fikilərinizi mənə bildirsəniz şad olaram. Nə isə sualınız olsa buralardayam.