Cok iyi anlasilir bir program yazmak icin bol bol fonksiyon yazmak onemli.
Ornek vermek gerekirse; CPU daki USB cevre birimini Bus'a baglamak icin
Asagidaki fonksiyonu yazabiliriz.
void USB_On()
{
USB_HWReg1 |= USB_OnBitSet;
}
Ayni sekilde USB yi devreden cikartmak icin
void USB_Off()
{
USB_HWReg1 &= ~USB_OnBitSet;
}
Boylece Usb yi on yada off etmek icin ilgili fonksiyonu cagirmamiz yeterlidir.
Ornegin
void Usb_Init()
{
Usb_On();
....
....
....
if (err) Usb_Off();
}
Fakat burada cok basit fonksiyon olan Usb_On ve Usb_Off fonksiyonlarina muracat edildiginde sadece iki satir asm kod ihtiva eden bu fonksiyonlar, fonksiyon cagriminin dogasi geregi Call ve Ret islemlerine ihtiyac duydugundan 2 satirlik CPU islemi 4 satira firlamaktadir.
Bu fonksiyonlari #define ile tanimlamak cozum olmasina ragmen bunlari fonksiyon olarak birakip optimizasyon asamasinda basit fonksiyonlarin, cagrildigi C satirlari arasina sikistirilmasina izin veren optimizasyon olup olmadigini merak ediyorum.
yani kod derlendiginde asagidaki yapi gibi derlensin istiyorum.
void Usb_Init()
// Usb_On();
USB_HWReg1 |= USB_OnBitSet;
....
....
....
// if (err) Usb_Off();
if (err) USB_HWReg1 &= ~USB_OnBitSet;
}
Bahsettiğiniz özellik "inline function" olarak geçer.
#define yerine inline kullanacaksanız, dosya uzantısını cpp yapmalısınız.Bu özellik (en azından Keild'de) sadece c++'da kullanılabiliyor.