Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Hi-TECH printf sorunu.

Başlatan F493, 03 Mayıs 2008, 11:10:29

F493

selam;


 Öncelikle herkese selam .

  Önceki çalılşmalarımda Hi-tech 960 da yaşadıgım bir problem ,

int val = 9;

printf("%2d",val);  
  şeklinde  ekrana  09   yazmazı gerekli ancak,printf de problem var.

pic18 9.61 ile  bir program yazıyorum lcd ekranda tarih saati

gösteriyorum,ancak ekrandaki sayılar tek haneye düştügünde ekran

karışıyor.

12/11-08   15:32:22    //bu şelilde problem yok

9/2/8 9:9:5   //burada sıkıntı printf sayıların başını sıfır ile beslemiyor.

olması gereken

09/02/08 09:09:05

ve bende 18 serisinde hi-tech KULLANMAMAYA  karar verdim.

az önce microchip  PICC18 derleyicisinde test ettim printf("%2d",val);  ve çalıştı.



Bu konudaki görüşlerinizi ve düşüncelerinizi bekliyorum.

esen kalın.

arslan74

Merhaba,

printf() fonksiyonunun pic18 serisine göre değişeceğini sanmiyorum. Ansi-C standartına göre yazılmış bir printf() fonksiyonu, bu standartı sağlamak zorunda dır aksi halde ansi-c standartındn bahs etmek söz konusu olmaz.

Bu durumda sanırım derleyicinin bazı ön ayarları yapılması gerekebilir. printf() gibi fonksiyonlarda varsayılan doldurma karaketerini herbir şirket farklı belirlemiş olabilir. Ama bu varsayılan doldurma karakteri değiştebilmen gerekiyor. Manuelinde ilgili bir acıklama yapılmış olmalı. Kendim printf() fonksiyonun fazla kullanmadığım için öyle bir sorunla daha karılaşmadım.

Ama sorunuzu basid bir proje ve simulasyonu ile yayınlarsanız. Sorunuz daha iyi teşhis etmiş oluruz.

Selamlar

F493

selam;


ve hi-tech derleyicisi ANSI C standarlarında oldugunu iddaa ediyor.

derleyicinin manueline bakmıştım zaten ve orada örneklerde bile bunu destekledigini gösteriyor,ama  sonuç negatif.

Derleyici nin manueli var diyor ,ben yok diyorum ;)

bir türlü çalışmadı. Adı üzerinde standartlar,benim bildigim eger bu şirketler standartlara uyma garantisi veriyolarsa ki hi-tect kocaman puntolarla bunu yazmış.

böle bir durumda her şirketin kendi kafasına  göre standartlar üzerinde oynama şansı varmı.

benim amacım bu bug olayını netleştirmek ,eger var ise :D

esen kalın.

F493

selam;

 Öncelikle  sevgili aslan74 ilgin için teşekür ediyorum.

 Sorunu çözdüm ;

Printf("%2d",val);  yapınca ekranda printf 2 boşluk atıyor ve sonra val'i yazıyordu.

Manuelindede bununla ilgili dogru dürüst birşey göremedim.

 ancak şöyle yaptım

val = 2;

printf("%.2d",val);   bu şekilde ekrana 02 yazdı ve benim saat tarih dogru görünmeye başladı.

   Sevgili aslan74 printf kullanmadıgınızı söylediniz, aslında bende kullanmamayı düşünüyorum,

  Float işlemler dışında printf kullanmanın pekte bir anlamı yok , bu konuda oturup bununla ilgili bir fonksiyon yazmak istiyorum  ama şuan vaktim yok desem inandırıcı olurmu acaba.

 sizin kullandıgınız (printf yerine) fonk.varsa eger sizin içinde bir sakıncası yoksa yayınlayabilirseniz bende faydalanmak isterim.


esen kalın.

arslan74

Alıntı yapılan: "F493"
   Sevgili aslan74 printf kullanmadıgınızı söylediniz, aslında bende kullanmamayı düşünüyorum,

  Float işlemler dışında printf kullanmanın pekte bir anlamı yok , bu konuda oturup bununla ilgili bir fonksiyon yazmak istiyorum  ama şuan vaktim yok desem inandırıcı olurmu acaba.

 sizin kullandıgınız (printf yerine) fonk.varsa eger sizin içinde bir sakıncası yoksa yayınlayabilirseniz bende faydalanmak isterim.


esen kalın.

Merhaba,

Bende float sayıları yazıyıya dönüştürmek haricinde sprintf() kullanmiyorum.

char, int, uchar, uint gibi deişkenleri lcd yazmak için kendim basid ve printf gibi fonksiyonlara göre cok yaz yer kaplayan ve daha hızlı çalışan fonksiyonlar yazdım onları kullaniyorum işinize yararsa göndereyim. Yayınladığım eğitim dökümanı projelerin içinde olması gerek. Kendinde cc5x web sayfasındaki örnek kodları inceleyerek böyle bir program yazdım. cc5x acık kaynaklı bir kütüphaneye sahip olduğundan işin mantığını öğrenmke adına cok faydalı oldu.

Aramamınız için kodu buraya atiyorum.

/* Write unsig int to LCD */

void lcd_write_int( int val){
	
	unsigned int	temp= 0;
	unsigned int	t= 10000;
	char 	flag=1;
	char 	flag_minus=0;
	unsigned char 	sifirlar = 0;

	if (val == 0){
	lcd_puts("00000");
		return;
	}
	
	if (val < 0){
		flag_minus= 1 ;
		val*= -1;
	}


	do{

	temp= val/t;

	if (flag)
		if ( temp == 0 ){
			sifirlar++;
			lcd_putch('0');
			continue;
		}
		
		else {
			flag= 0;
			if(flag_minus)
				lcd_putch('-');
		}
		
	lcd_putch('0'+temp);

	val= val - temp*t;
	
	}while(t/=10);
	
//	while (sifirlar--)
 //		lcd_puts(" ");


}


Selamlar

F493

selam;

 Sevgili aslan74  teşekür ediyorum.

  iyi çalışmalar diliyorum.

esen  kalın.