Hangisi? asm-pbp-c

Başlatan Veli B., 11 Ocak 2004, 16:47:54

axanc

arkadaşlar,
"c derleyicisi" konusundaki uyum dediğim olay "aynı" derleyici ile olan uyumluluktur... Düşününki çoğu program "C" temmelli geliştiriliyor...
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

mmengi

Alıntı yapılan: "Erol"
Bu arada C dilindeki uyumluluk pekte abartilacak birsey değil. CCS te yazilmis programi Hitech te calistirmak icin baya bir cevrim yapmaniz gerekiyor. Bir de Basic olayini kucumsememek lazim. CCS veya HI-Tech 'e gore dezavantaji pek yok ama avantaji cok...

Evet arkadaşlar hi-tech ile proton+ arasında yaptığım bir kaç kıyaslama sonucunda çokta elle tutulur bir farklılık olmadığını gördüm. illada C diye çok fazla kasmanın anlamı yok ama ASM olmadan hiç birinde iş yapamazsınız. Sonuçta pic için yapılmış bütün derleyiciler yazdığınız kodları asm makrolarına çeviriyor ve bir işi yaparken doğruya giden en kestirme 1 yol vardır ve bu yolu hem C de olsun hem basic te olsun birbirlerine benzer şekillerde çözmüşler.

axanc

Bazı şeyler hiç değişmez tabii...  8)
LIST		P=16F84A
	#INCLUDE	P16F84A.INC

	__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC

;************************************************************
;DEGISKENLER
	CBLOCK	0x0C
        	SY1,SY2,SYC1,SYC2,SYC3,DURUM,DATA1,DATA2,YOLA,YOLB,YOLC,YOLD,YA,
YB,YC,YD,BYK,SAYA,SAYB,SAYC,SAYD;
	ENDC

;************************************************************
;MACRO'LAR
	ISLE	MACRO
	MOVWF	DURUM
	CALL	DATA_OUT
	CALL	GECIKME
	MOVLW	B'00000001'
	ENDM

;************************************************************
BASLA
	CALL	KURULUM

BASLA2
	MOVLW	B'01010101'
	MOVWF	DURUM
	CALL	DATA_OUT

;************************************************************
Uzmanlık: Bilgisayar Müh. öğrenci Derleyici: PicBasic Pro Compiler Ver. 2.45 Program: Proteus 6.2.5 ve MCSP

SpeedyX

bana kalırsa ;

asm de başla... c öğren ve devam et...
çünkü bir süre sonra asm kullanarak zihnimizi gereksiz yere, fazla yoruyoruz.

ei

Belki çok isabetli bir soru olmayacak ama merak ediyorum aynı işi yapmak üzere asm, c ve  picbasic ile yazılacak birer programın:
a) HEX'e çevrilince tutacağı miktar,
b) Bu işi yapma süreleri,
c) Bu iş yapma hızları
bakımından bir mukayesesi (çok hassas olmasa da) var mıdır? böyle somut bir bilgiye nasıl ulaşılabilir?
Teşekkür ederim.

Erol YILMAZ

Bircok sitede degisik deneyler var.
Hepsi kendi derleyicisinin urettigi kodlarin daha az yer kapladigindan bahsediyor. vs. Ama [basic bilmeme ragmen] benim yazdigim Basic kodu ile senelerdir Basic kodu yazan birisinin yazdigi kodlar ve sonuclari bir olmayacaktir. Derleyicisini taniyan birisi, kendine uygun optimizasyonlari yapar. Hiz ve alan acisindan avantajli olur.
Bu optimizasyonlari yapmazsan da genelde kaba bir koda sahip olursun. Cok kafana takilan bir yer varsa orayada ASM ile birkac satir ilave edersin. Is biter.
Onemli olan derleyiciyi tanimak.

Egitim SART !!!

DumrulBey

Merhaba,

Erol'un dediklerine aynen katılıyorum. Fakat yapabileceklerimizin hepsi bu değil. Nasıl bir takım donanım siteleri gibi (örneğin http://www.pclabs.gen.tr) bilgisayar bileşenleri test ediliyor biz de PIC mikrodenetleyicileri derleyiciler ile beraber test edebiliriz. Öyle değil mi?

Aslında sorun test etme de değil! Çünkü bu çok kolay bir şey. Galiba mesele kriterleri belirlemekte. Ayrıca test ortamı nasıl olmalı? Yani 16F ailesinde mi, yoksa 18F ailesinde mi test yapalım? Zira 18F ailesi C kodları için genişletilmiş komut setine (instruction sets) sahip. O yüzden C'den derlendiği zaman daha kısa ve hızlı kodlar çıkacaktır.

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

ei

Elbetde her üretici kendi ürününün en iyisi olduğunu söyleyecektir.. Elbette "optimizasyon" bir takım iyileştirmeler yapar;
Elbette farklı kişilerin yazdığı kodlar arasında fark olur;
Elbette farklı PIC'ler üzerinde yapılan işlerin sonuçları farklı olacaktır.....
Her ne kadar "öğrenim görmüş" bir elektronikçi değilsem de yukarıdakileri bir hukukçu da bilebilir amma yine de tenvir etdiniz, teşekkür ederim.
Aziz gençler,
Bir "karşılaştırma"dan söz edildiği zaman belli bir ortak payda bulunur ve  ortak payda referans olarak alınır.
Mesela, PC'de farklı lisanların (basic, pascal, c vs.. gibi) hızlarını ölçmenin "kabaca" bir yolu aynı işi bu lisanların herbirine yaptırmaktır. Sözgelişi 1'den 1 milyona kadar sayıları ne kadar zamanda sayabildiği gibi.. Zamanında bu işi derlenebilir basic ve pascal içn yapmıştım mesela ve dramatik farklar ortaya çıkmışdı... PIC'ler için de sorduğum şey üç aşağı beş yukarı böyle birşeydi..
Hayatdaki en iyi öğrenme yolu "sınama yanılma"dır ve bu sınama yanılma da gösteriyor ki "tırnağın varsa başını kaşı"
Hakikaten eğitim şart...  :)

Erol YILMAZ

Tamam o zaman, yapalim basit bir test...

Mesela 2 adet 24 bit float degisken sayiyi carpalim, 3. degiskene aktaralim. Ben CCS te yazacagim. Diger arkadaslarda degisik derleyicilerde yazsinlar...  Olur mu?

Gelen sonuclarda lutfen kaynak kodu ve kullanilan derleyicinin adini, versiyonunu tam olarak yazin. Optimizasyonlari da kapatalim.

mmengi

Proton+ 2.20 Beta

device 16f628

dim A as float
dim B as float
dim c as float


A=2.12586856784531
B=0.00124402145470
C=A*B


PROGRAM COMPILED OK. 155 Words used from a possible 2048
   27 Variables used in the 16F628 from a possible 224

mmengi

C pek kullanmıyorum ama sanırım böyle yapılıyor.

CCS 3.212

#if defined(__PCM__)
#include <16F628.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)


void main() {
      float A=2.12586856784531 , b=0.00124402145470  , C;

   while(TRUE) {
      C=A*B;

   }
}


169 Word

Erol YILMAZ

#include <16F628.h>
float a,b,c;

void main()
{
   a=2.12586856784531; 
   b=0.00124402145470; 
   c=a*b;
}


CCS PCM, Version 3.212              
ROM used: 169 words (8%)
                        Largest free fragment is 1879
              RAM used: 17 (10%) at main() level
                        30 (17%) worst case
              Stack:    1 locations

baska yok mu???

DumrulBey

Merhaba,

Bence bu tür testleri bu kadar basit örnekler ile yapmayalım. Örneğin aşağıdaki gibi asal sayıları bulan bir uygulamaya ne dersiniz? İyi bir test için LCD ekran kapalı tek LED'li veya LCD ile beraber yapalım. PIC Basic kodlarını beklerim.

#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#define use_portb_lcd TRUE
#include "MATH.H"
#include "LCD.C"

void main() {
  int16     xSay, xBak;
  int16     xAsal, xBas, xSon;
  boolean   bEkran;

  xBas =    1;
  xSon =    32768;

  lcd_init();
  printf(lcd_putc, "\fTARANIYOR...\n");
  for (xAsal = xBas; xAsal <= xSon; xAsal++) {
    bEkran = True;
//    for (xBak = 2; xBak <= ceil(sqrt(xAsal)); xBak++) { //1 dakida 6311'e kadar
//    for (xBak = 2; xBak <= ceil(xAsal/2); xBak++) { //1 dakikada 3461'e kadar
//    for (xBak = 2; xBak <= xAsal; xBak++) { //1 dakikada 4679'a kadar
    for (xBak = 2; xBak <= (xAsal>>1); xBak++) { //1 dakikada 6659'a kadar
      if (xAsal % xBak == 0) {
        bEkran = False;
        break;
      }
    }
    if (bEkran) {xSay++; //printf(lcd_putc, "%lu\n", xSay);
      printf(lcd_putc, "%lu, TOP. %lu\n", xAsal, xSay);
    //  delay_ms(1000);
    }
  }
}

Ayrıca uygulamayı 18F ailesi ile deneyelim. En son denediğimde yanlış hatırlamıyorsam  4xPLL ile yani 10 Mhz. hızında 7 dakikada hepsini taramıştı. Tabi LCD ekrana veri gönderme açıktı.

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

Erol YILMAZ

boyle bir sonuca ulasilmaz yaw.
Isteyen istedigini kullansin. Ornegin Hi-Tech benim derleyiciden %40 oraninda daha az kod uretsede ben kullanmam. Gelistirme ortami cins. Fonksiyonlarinin isimlendirmesi bence ters. Vs. vs. Derleyiciler hakkinda soru sorun ama bu test yontemi pek para etmez.
Hi-Tech diyen kardes niye Hi-Tech diyor onu soylesin, daha mantikli olur bence...

yıldırım ak

Küçük program kodları ile bir yere varamazsınız. Stack seviyelerini, kapasiteleri zorlayan projelerde karşılaştırmaları yapar iseniz sonuç çok net ortaya çıkacaktır. Derleyicinizi istediğiniz kadar tanıyın, üreteceği hex kodu %100 belirleyemezsiniz.

Derleyicinizin mantığını çözmeye uğraşmak yerine, assembly mantığını çözmeye çalışmanızda fayda var diye düşünüyorum. Bu sayede hakimiyeti tam olarak ele alabilirsiniz. Sürücü koltuğuna oturmak yerine, arka koltuktan araba kullanmaya çalışmayın !

Saygı ve Sevgiler...
"... Bana kulluk et; Beni anmak için namaz kıl" (Taha 14)