C Programlama Dili

Buradaki açıklamaları kolay anlamak için en az bir programlama dilini bilmeniz gereklidir. Eğer C diline ait bir bilginiz yok ise tavsiyem C programlama dilini anlatan bir kitabı okumanızdır. Ben C diline Rifat Çölkesen - C Programlama Dili ’in yazmış olduğu C kitabını okuyarak başlamıştım.

Gömülü sistemlerde genel olarak ana iki programlama mimarisinden biri seçilir. Bunlar:

  • Bare-metal (direk firmware hazırlamak)
  • Gerçek zamanlı işletim sistemi(RTOS) üzerinde çalışmak

Genel olarak ben bare-metal programlama tercih ediyorum. Şimdilerde gömülü sistemlerde kullanılan mikrodenetleyiciler eski mikrodenetleyicilerden daha fazla RAM ve ROMa sahip olduğu ve mikroişlemciler gibi RAM stack, software interrupt, vb. ilave imkanlar sağladığı için RTOS kullanımı giderek yaygınlaşmaktadır.

C dili üst seviye bir programlama dili olmasına rağmen çok güçlü donanım erişimi sağlamasından dolayı gömülü sistemlerde yaygın olarak kullanılmaktadır. Dile ait ANSI ve ISO standartlarının yayınlanmasından sonra kod taşınabilirliği önemli ölçüde kolaylaşmıştır. Bu sayede yazdığınız kodu çok az değiştirerek farklı işlemci mimarileri için derlemeniz ve çalıştırmanız mümkündür. Uygulama örneği olarak UNIX, Linux işletim sistemlerinin çekirdekleri C dili ile yazılmıştır.

Kod Bölümleri

Her programlama dilinde olduğu gibi C dilinde de uyulması gereken bir format ve kodlama terimleri mevcuttur. Burada kısaca C dilinde kullanılan bölümleri ve etkilerini anlatmaya çalışacağım. Aşağıdaki örnek koda bakalım:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <MIKRODENETLEYICI_MODEL.h>
#include <stdio.h>
#include "modul1.h"
#include "bu_modul.h"

#define FLAG_SAYAC_DEGERI  (500)
#define DURUM_FLAG_MASKE   ((1 << 4) - 1)

static volatile unsigned int flag;

void timer_ISR (void)
{
   static unsigned int sayac;
   //....
   if (0 == sayac)
   {
      flag = 1;
      sayac = FLAG_SAYAC_DEGERI;
   }
   else
   {
      sayac--;
   }
   
   //....
}

void main (void)
{
   unsigned int durum;
   //....
   //....
   if (flag == 1)
   {
      const unsigned int aktif_durum = durum & DURUM_FLAG_MASKE;
      flag = 0;
      //....
      //....
   }
   //....
   //....
}

C Programlama Dili Konuları

Uyarı

C Programlama Dili Konuları C dilini anlatmayı amaçlamamaktadır. Asıl amacı C diline ait terimlerin gömülü sistemlerdeki karşılığını ve kullanım yöntemlerini açıklamaya çalışmaktır. C diline ait açıklanmamış konular ve terimler için lütfen C programlama dilini anlatan bir kaynağa başvurun.