stellaris-tiva integer to char ve uart dan basma yardım

Başlatan fractal, 02 Mayıs 2014, 17:08:16

z

Karsi taraf ya terminal ise. Karsi taraf ya verileri asci alan bir cihaz ise.

Karsi tarafa uymak lazim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fractal

ben hmi ile haberleşme yaptırıyorum.aslında oraya giden integer ya her neyse nereye gittiğini biliyorum.giden bölgeyi sayı olarak göster dediğimde zaten problem yok.
sadece değişkenleri nasıl karakter olrak gönderebiliriz gerçkeleştirmeye çalıştım.

tekrardan söylemek gerekirse o kodları ccs de çalıştıramadım.derlemek için uğraşıyorum.dünyanun öyle yaptığı şeyi anlamadım.o kodlarla tam olarak ne yapmaya çalışıyoruz...
Restantum cogniscutur Quantum deligutur

z

Simdi cok kizdim.

Bir urun yapmaya calisiyorsun ve C yi bu kadarcik biliyorsun. Pessss.

C yi birak ve en iyi bildigin bir dili kullan.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fractal

her gün projeme zaman ayırmaya çalışıyorum.cok farklı eşylerle uğraşıyorum.ani sıçrayışlarım oluyor.hatırlamaya zamandan kazananmaya çalışıyorum.
ne söyleyebilirim. açıklama yaparsanız teşekkürler..
Restantum cogniscutur Quantum deligutur

z

Elestirim agir oldu ama projeye basladiginda kullanacagin dilin en azindan temellerine hakim olman lazim. Temeller saglam olunca gerisi teferruat.

1 hafta projeye ara ver ve C ye asil. Sadece 1 hafta.

Bildigin gibi structure, birden fazla veri barindiran degiskenlerin olusturdugu bir topluluk.

Eger "structure"rin  adresini ve icindeki verilerin toplam uzunlugunun kac byte oldugunu bilirsen bunlari byte byte okur ve yollarsin.

Boylece sayilari, hafizada kayitli oldugu sirada byte bilesenlerini tek tek yollamis olursun.

Gerbay'in onerisi bundan ibaret. Bir guzel yani veri basina 0xAA ve 0x55   gibi taninmayi kolaylastiracak baslik bilgisi konmus.

Karsi taraf 0xAA, 0xAA ardindan 1234567 decimal sayisinin byte byte bilesenlerini ardindan da 3.1415926f float sayisinin byte bilsenlerini tek tek yolluyor.

Burada 1234567 sayisinin byte bilesenleri 0x12 0xd6 0x87 dir. Ancak hafizada bunun tersi siralamada da yer almis olabilir. Keza 3.1415926f sayisi hafizada exponent mantis olarak tutulur ve bu verileri decode etmek icin kullanilan float sayi formatini bilmek gerekir.

Karsi taraftaki alici  cihaz da kodlari sen yazacaksan float sayiyi gene bir structer icine  paketlemeye dikkat ederek yerlestirirsen Float sayin zaten karsida olusmus olur.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Gerbay hocam,

C kodlamayi asagidaki gibi yapan bir arkadasa yukaridaki anlatiminla yardimci oldugunu hic sanmiyorum.


#include <stdio.h>
 unsigned int sayi;
char string[30];

void itoa(char *ret,int value){
sprintf(string,"%d",sayi);
}


int
     main(void)
{
 value=123;
 itoa(string,value);


}
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yamak

Gerbay Hocam ;
struct'ın içindeki
char reserved[2]
değişkenini tanımlamanızın nedeni nedir.Alignment ile ilgili bir durum mu?

berat23

ben veri nereye gidiyor diye sorarken bu yüzden sormuştum. eğer veri lcdye falan basılmayacak, yine bir işlemciye/pc'ye gidecekse gerbay'ın dediği gibi paket halinde göndermek gerekir, hatta paketin sonuna checksum,crc benzeri birşeyler eklemekte gerekir.

z

@Gerbay hocam

Ama dedigim gibi. Karsi tarafin ne oldugunu bilmiyoruz.

Karsi tarafda dusuk frekansda calisan minik bir mikro varsa onu float donusumle ugrastirmam.

Ya da gelen verileri ekrana basan bir duzenek varsa zaten asci yollamaya mecbursun.

Fakat, evet karsi tarafta alinan float deger ile zaten float islemler yapilmaya devam edilecekse iletisim icin ASCI ye cevirmek hic hos olmaz.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fractal

elimde deltanın hmi vardı.ona macro yazdım.bir sayfa yaptım.her kesmede 20 karakter alıyorum.datayı attığım adresleri ortak olarak numerik ve karakter göstergelerine verdim.sayfamda biri karakter göstergesi diğeri numerik gösterge olarak 2 adet gösterge var.uartsend komutu ile sayı değişkenini gönderdiğimde numerik displayde doğru gözüküyor.karakter display doğal olarak başka .tam tersinde tam tersi oluyor.şu an yazılan kodları inceliyorum...

Restantum cogniscutur Quantum deligutur

z

Gerbay hocam bos adam degilsin ama bos konusuyorsun.

1. Karsi tarafin ne oldugunu bilmiyoruz derken karsi tarafta float sayinin kendine mi yoksa ASCI degerine mi ihtiyac duyacagiz bilemeyecegimizi soylemistim. Pek ala ASCI deger isteyen cihaz olabilir.

2. Karsi tarafta yavas bir islemci kullaniyorsam float degerleri de sirf  gostermek/yazmak icin bu cihaza gondereceksem float degerleri hizli islemci tarafinda stringe ceviririm. Yani float sayiyi karsiya aktarmam.

3. Karsi tarafta float sayilarla islem yapmayacaksam zaten float gondermenin anlami yok. Karsi tarafa deger ya fix point amacli yada display amacli gidecek demektir.

4. Eger islemcinin math unitesi yoksa bu durumda float sayilari bir baska formata yada display edilebilir formata siz donustureceksiniz demektir. Bunuda sprintf le mi yoksa
bir baska komutlami yaparsin bilemem. Bu komut  bolme ile mi yapar baska bir yolla mi yapar onu tartisiriz.

Ama dedigim gibi, karsi tarafa aktarilacak float data alindiktan sonra uzerinde float islemler yapilmayacaksa bunu float gondermenin zerre anlami yok.

Dunyada ne yaparlarsa yapsinlar. Aklin yolu bir. Bunu bir kural olarak onumuze seremezsin. Float sayi karsiya float sayi olarak gonderilecekse zaten sayilari asci degil byte byte sayinin bilesenleri olarak yapmaktan daha tabii bir sey olamaz.

Son olarak arkadaslar  float sayiyi 1000, 10000, 100000 gibi bir sayi ile carpip (bazen de integere cevirip) ardindan  bolme yada modul islemleriyle duz mantikla donusum yapiyorlar.

Eger elinde  Binary to BCD islemini yapan donanim yada komut yoksa malesef bolme yada carpma islemi ile yapacaksin.  Carpma hele hele de  bolme evet uzun zaman alan islemlerdir. Peki float sayiyi karsi tarafa yolladiginda karsida FPU unitesi yoksa jet hiziylami  donusturecek arkadas?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com