• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Gömülü Projeler Geliştirmek için Gerekli İpuçları

8 bit gömülü platformlarda (8051, AVR ve PIC mikro denetleyiciler) ortak kullanılmakta olan C programlama dilinin bazı özelliklerini öğrenelim.

18.06.2013

Yazar: Muhammed ÖNAL (Google+)

Kategori: Gömülü Sistemler

4756

Merhaba değerli arkadaşlar,

Bu yazımızda 8 bit gömülü platformlarda (8051, AVR ve PIC mikro denetleyiciler…) ortak kullanılmakta olan C programlama dilinin bazı özelliklerini irdelemeye çalışacağım.

C programlama dilinde Mikro denetleyici programlarken çoğu zaman yazaçlar (register’lar) ile uğraşmak zorunda kalırız. Bu noktada programatik olarak kodlarımızı gösterdikten sonra kafa karışıklığına neden olan noktalar açıklığa kavuşmuş olacaktır.

Şimdi dilerseniz öncelikle bir bilgisayar sistemi içinde bir yazacın ne olduğunu öğrenerek, mikro denetleyici sistemlerde ne tür işlevleri olduğuna göz atarak başlayalım.


Registers (Yazaçlar)

Bilgisayar Sistemleri içinde bir yazaç(register), bir bitlik bilgiyi depolama kapasitesine sahip flip-flop (yaz-boz)’lardan meydana gelen flip-flop grubudur.

Bu açıklamadan hareketle bir flip-flop’un ne iş yaptığına bakacak olursak, ikili (binary) bilgiyi tutar ve  kapılar yeni bilginin yazaç (register) içerisine aktarıp aktarılmadığını kontrol ederler.

Mikro denetleyici sistemlerinde ise bir yazaç(register), basitçe bazı bitlerin koleksiyonudur diyebiliriz. (Çoğunlukla 8 bit mikro denetleyicilerin durumunda)

Ya bir yazaç da farklı bitte bazı amaçlara sahiptir ya da bir bütün olarak yazaçlar da bir değer tutar.

Yazaçlar, bir CPU ve bir çevresel cihaz (ADC (Analog to Digital Converter) ve TIMER gibi…) arasındaki bağlantı olarak hizmet sunmaktadır.

                                           CPU Writes to Register

CPU, Yazaçlara;

  • Çevre birimlerinin yapılandırılmasını yazar
  • Çevre birimlerine komutları yazar

Çevre birimlerine veri transferlerini yazar

                                          CPU reads from Register

CPU, Yazaçlardan;

  • Çevre birimlerinin durumunu alarak okur. Örneğin; ADC ve TIMER vb.
  • Çevre birimlerinden veri okur. ADC sonucunun değeri gibi.

 

C Programlamada Binary (İkili) SayılarİKİLİ (BINARY) SAYILAR

A=110, yazdığımız zaman, C programlama dilinde a bir değişken değerine onluk sistemde 110 değerinin atanması anlamını taşır.

Örneğin; İkili sayı olarak verilen 10010111 ikili sayıyı bir register olarak ayarlamak istediğimizde;  A=10010111 şeklinde yazmamız mümkün değildir. Çünkü derleyici onluk olarak yorumlayacaktır. Bu nedenle, ikili sayıları belirtmek için C programlamada 0b ile belirtilen bir ön-ek belirtmemiz gerekmektedir.

Eğer bu dediğimizi uygularsak;
A=0b10010111;
şeklinde yazarsak,

A yazacına 10010111 atamış olur.

C Programlamada Hex Sayıları

Binary sayılarda olduğu gibi hex sayıları derlemek için C programlamada 0x ön ekini belirtirsek derleyici hex sayılarını yorumlayabilecektir.

A=0x10;  

A=0xFF;   (Tüm bit’lerin 11111111’e ayarlanmasıdır. )
 

Registerda (Yazaçta) Bir Bit'in Ayarlanması

Burada ki amacımız verilen bir yazaçta herhangi bir bit’i set etmektir.

Burada yazacımız A olsun. Bu yazacımıza verilen 5 bit’i logical 1’e set edelim. Bu işleme ait syntax yapısı aşağıdaki gibidir.

A=A|0b01000000;

Şimdi, dilerseniz bu söylediklerimizin biraz pratikte kullanımına bakalım. Pratikte, her bir bit çalışmasına/fonksiyonuna göre bir isme sahiptir.

Bizim vermiş olduğumuz bit değeri olan 5; ENABLE ismine sahiptir.  Bundan dolayı işlevine ait isim onun ne yaptığını açıkça gösterir. 1 yaptığımız zaman çevre biriminin ENABLE (etkinleştirildiğini), 0 yaptığımız zaman çevre biriminin DISABLE (devre dışı bırakıldığını) söylemek açıkça mümkündür.

Syntax yapısı aşağıdaki gibi gösterilebilir.

A| = (1<<ENABLE);

Burada << operatörü left shift (sola kaydırma) anlamını içermektedir.

Left Shift ve Right Shift Operatörlerini: bir örnek üzerinden açıklayacak olursak,

int x;

x = 12;

12 sayısının bit olarak gösterilişi. 00001100 şeklindedir.  Hex olarak ise 0x0C

x>>2 ; // a’yı 2 bit sağa kaydır 00000011.  x’in yeni değeri = 3 olur.  0×03 Hex

x = 12;

x<<1; // x'i bir bit sola kaydır. 00011000 = 24, 0x18 hex

 

Şeklinde izah edilebilir.

 

Buradan şu sonucu çıkarmak mümkündür. Bir sayıyı 1 bit sola kaydırmak 2 ile çarpmak anlamına gelmektedir.


Ve yine örneklendirmelerimize devam edersek;

b=1<<3    // binary olarak verilen 1’in 1= 00000001 değerinin 3 bit sola kaydırılmasıyla oluşan yeni değer.

                     00001000

Konumuzun başında ifade ettiğimiz gibi 5 bit’i logical 1’e set ettiğimizde (yani 5 olarak ENABLE tanımlanırsa)

A|=(1<<ENABLE);

Sonuç

A|=(1<<5);

A|=(0b001000000);

Sonucunu elde ederiz.

Tamda bu noktada şu soruyu soruyor olmanız gerekirdi? Peki, bu yaptıklarımızın bize sağlamış olduğu avantaj nedir?

Sağlamış olduğu avantajı açıklayacak olursak, şunları söylemek mümkündür.
 

       1- Kod Okunabilirliği:  A|=(1<<ENABLE); 
       2- 
Kolay Taşınabilirlik:

Eğer programınızda bu kodu birçok kez kullandığınızı ve şimdide başka bir MCU modeli üzerinde aynı kodu çalıştırmak istediğinizi varsayarsak işlemlerinizde çok fazla kolaylık sağlamış olur.
 

Registerdan (Yazaçtan) Bit Silme

Genel anlamda kullanılan operatörler AND (&) ve OR(|) operatörleridir. Bunların syntax yapısı aşağıdaki gibidir.

A&=~(1<<A);

                                             Register BIT gösterilmesi

Silme işleminin çalışması aşağıdaki gibi işlemektedir:

A&=(~((1<<ENABLE)|(1<<FAST_MODE)|(1<<BUSY))); 

A|=((1<<ENABLE)|(1<<FAST_MODE)|(1<<BUSY));

Registerda Bit Durumunun Test Edilmesi

Buraya kadar olan süre zarfında yazacı set ederek ve silerek değiştirdik.

BIT durumunun test edileceğini gösteren kod syntax yapısı aşağıdaki gibidir.

if(A & (1<<ENABLE))
{
     // “A” da ENABLE : 1
                 ...
}
else
{
     // “A” da ENABLE :0 
}

Bir sonraki yazımızda görüşmek dileğiyle , faydalı olmasını temenni ederim.

Muhammed ÖNAL
Bilgisayar Mühendisi
RFID Sistemleri Uzmanı
BT Yönetişimcisi

Blog:  http://www.muhammedonal.com
Web : http://www.yazilimdilleri.net

Yazar Hakkında

Muhammed ÖNAL

Muhammed ÖNAL

www.muhammedonal.com

Bilgisayar Mühendisi | RFID Sistemleri Uzmanı | BT Yönetişimcisi | Strateji Planlama ve İş Geliştirme 2015 itibariyle sağlık sektöründe Bilgi Sistemleri Yöneticisi ve Üst yönetim Stratejik Planlama ve İş Geliştirme Koordinatörü pozisyonunda çalışmaktadır.

Sosyal Medya

ORANLAR

  • 4756izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 123776
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 70839
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51496
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ