“Arguments cannot have explicit memory specificator” Hatası

Gömülü sistem ile uğraşan arkadaşların karşılaşacağı bir problem de “Arguments cannot have explicit memory specificator”
hatası olabilir bu hatanın nedeni ise kullandığınız derleyicideki keywordlerden birini değişken olarak kullanmaya çalışmanızdır.
Mesela ben Micro C derleyicisine “data” isimli bir değişken verince böyle bir sorunla karşılaşıyorum. Eğer değişkenin ismini değiştirirseniz bu hata ortadan kalkacaktır.

Reklamlar

Micro C’de “Demo Limit” Sorunu

MicroC’nin demo sürümünü kullananlar böyle bir hatayla karşılaşabilirler.Özellikle de mmc ile programlama yapılıyorsa böyle bir sorunla karşılaşılması mümkün.Demo sürümü bize sadece 2k okuma ve yazma sınırı veriyor.Eğer bu limiti geçerse MicroC programı derlemez.

Peki biz böyle Ram’in yetmediği durumda ne yapacağız?

Demo sürümünü cracklayıp kullanacağız.Cracklama işlemi çok basit.

HIDDongleDLL.dll dosyasını MicroC nin kurulu olduğu dizinde aynı isimle dosyayla yer değiştireceğiz.

Crack dosyasını buradan paylaşamıyorum.Bu yüzden ihtiyacınız olursa mail yoluyla size ulaştırabilirim.

Sanal Terminalden Girilenleri Lcd’de Yazdırma

Gömülü Sistem Tasarımı dersinde yaptığımız projeleri burada paylaşacağım.

İlk anlatacağım proje Sanal Terminal’den girilen stringleri Lcd ekranında yazdırma.Bu projeyi yapabilmek için ilk önce isis ve micro c programlarını bilgisayarınıza kurmanız gerekmektedir.

İlk olarak projemizin görsel kısmını yani İsis de olan kısmını yapıp kodlama kısmına daha sonra geçeceğiz.İsis’de oluşturulan dosyalar .dsn uzantılıdır.Bizim de .dsn uzantılı dosyamızda olması gereken elemanlar şu şekilde olabilir;

İlk olarak bir microişlemciye ihtiyacımız var ben microişlemci olarak 16F877A işlemcisini kullanıyorum.

Microişlemcinin çalışmaya başlaması için de power elemanımız olmalı.

Yazdığımız yazıları ekranda göstereceğimiz bir LCD miz ve bu yazıları yazmak için bir sanal terminalimiz olmalı.

Ayrıca haberleşmeyi sağlayabilmemiz için Compim modülümüz gereklidir.

Bizim bu projeyi gerçekleştirmek için Usart modülüyle ilgili bilgimizin olması gerekir bu yüzden aşağıda Usart ile ilgili biraz bilgi vereceğim.

USART modülü mikrodenetleyicilerin çoğunda bulunan kullanımı basit ve standart seri RS232 haberleşme birimidir. Universal Synchronous Aynchronous Receiver Transmitter (Evrensel Senkron Asenkron Alıcı Verici) anlamına gelmektedir. Bu modülden gönderilmek istenen datalar, sıra ile lsb den msb ye doğru yani en düşük değerlikli bitten en yüksek değerlikli bite doğru gönderilir.  Gönderici taraf TX (transmitter) hattını data göndermezken Lojik1 seviyesinde tutar. Data gönderileceği anda hat Lojik 0 seviyesine çekilerek data gönderilmeye başlanır. Bu işlemdeki hattı Lojik 1 den Lojik 0 seviyesine çekme olayına start biti denir.  Yukarıdaki şekilde bunu daha iyi görmekteyiz zaten. Start bitinden sonra, datalar bit bit gönderilip dataların sonunda ise Stop biti gönderilir. Stop biti ise, son bitten sonra(MSB den sonra) hattı lojik 1 seviyesine çıkarma işlemidir. Eğer 9 bitlik data gönderimi veya parity(eşlik biti gönderimi yapılmıyor ise) bir byte data gönderimi için toplam 10 bit gönderilir. 1 start bit + 8 data bit + 1 stop bit..

Alıcı taraf ise hattın lojik1 den lojik0 seviyesine çekildiğinde data gönderiminin başladığını anlar gelen bitleri ayarlanan baudrate süresince alır ve buffer ı na yazar. Stop biti ile buffera gelen data yazılmış olur. Ve ilgili flag set edilir. Eğer kesme kullanıyorsak, kesme alt programına dallanır. Kesme kullanmıyor isek, buffer dolduğunda set edilen barağı sürekli kontrol ederek datanın gelmiş olduğunu anlarız.

Baudrate meselesine gelince… Baudrate 1 bitin ne kadar sürede gönderileceğini ve alınacağını belirleyen bps(bit per second – 1 saniyede gönderilen bit sayısı) birimi ile ölçülür.  Sizde birçok yerde görmüşsünüzdürki, Baudrate parametresi 1200,2400,4800,9600,19200,115200 gibi değerler almaktadır. Alıcı taraf ile gönderici tarafın baudrate değeri aynı olmalıdır ki, gönderilen datalar alıcı tarafında doğru bir şekilde alınabilsin.

Usart ile ilgili bilgi verdiğimize göre artık projemize geçebiliriz.Projemizin isis de görüntüsü aşağıda görüldüğü gibidir.

isis

Micro c deki kodlarımıza gelince:

sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;

sbit LCD_D7_Direction at TRISB3_bit;

char uart_rd;
main()
{
int i;
TRISB=0;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR); //
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,6,”Hosgeldiniz”);
UART1_Init(9600);
UART1_Write_Text(“istediginizi girin”);
UART1_Write(13);

while (1) { // Endless loop
if (UART1_Data_Ready()) { // If data is received,
uart_rd = UART1_Read(); // read the received data,
UART1_Write(uart_rd); // and send data via UART
Lcd_Chr_CP(uart_rd);

if(uart_rd==13) Lcd_Cmd(_LCD_SECOND_ROW);

}
}

}