MikroC - USB ile 64 byte dan uzun veriyi nasıl alabilirim?

Başlatan Hadi, 22 Ağustos 2015, 21:53:31

Hadi

Değerli arkadaşlar merhaba;

MikroC'de USB ile 64 byte dan uzun veriyi nasıl alabilirim?

Veya aldığım 2 diziyi nasıl birleştirebilirim? (Baktım dizi birleştirme için bir komut falan bulamadım)

Galiba MikroC dizi işlemleri için çok kısıtlıdır, baktığım kadarıyla fonksiyonlar dizi Retun etmiyorlar, ya da parametre olarak bir fonksiyona dizi veremiyoruz. Dizi boyutunu öğrenme bile sıkıntılı.

Şimdiden ilgilenen arkadaşlara teşekkürler.

LukeSkywalker

Bu tarz sorulari ileride de sormamaniz icin size kaan aslan c kitabini tavsiye ederim.

Hadi

Alıntı yapılan: LukeSkywalker - 22 Ağustos 2015, 22:22:44
Bu tarz sorulari ileride de sormamaniz icin size kaan aslan c kitabini tavsiye ederim.

Link atarmısınz?

sayment

Alıntı Yap
Maximum Data Payload Size
An endpoint used for a control transfer specifies the maximum data payload size that it can accept or transmit to the bus. The allowable maximum data payload sizes depend on the speed of the device:
High-speed device endpoints may only select a maximum data payload size of 64 bytes.
Full-speed device endpoints may select a maximum data payload size of 8, 16, 32, or 64 bytes.
Low-speed device endpoints may only select a maximum data payload size of 8 bytes.

64 Byte'den daha uzun veri transfer edemezsin.

Hadi

Alıntı yapılan: sayment - 22 Ağustos 2015, 22:38:17
64 Byte'den daha uzun veri transfer edemezsin.

Doğrudur hocam, peki hocam nasıl bir yol tavsiye edersiniz?

omenek

64 byte ın içinden bir byte ı adresleme için kullanabilirsin böylece alıcı tarafta bu byte ın değerine göre dizileri sıralarsın

sayment

Micro C'nin USB kütüphanesini tekrar inceledim. Kütüphane çok kısır, yeterli bilgi de verilmiyor ama Gen_Read() fonksiyonu iş yapabilir gibi. Alınan verinin uzunluğunu döndürüyor. Aldığın verinin uzunluğunu vericiye geri gönderip kalan kısmı ikinci bir paket olarak göndermesini isteyebilirsin.

http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/usb_hid_library.htm#hid_read

Hadi

Alıntı yapılan: omenek - 22 Ağustos 2015, 23:04:12
64 byte ın içinden bir byte ı adresleme için kullanabilirsin böylece alıcı tarafta bu byte ın değerine göre dizileri sıralarsın

Hocam aslında bunu da düşündüm ama yine bir problem var, o da bu ki sonuçta bana tek bir dizi lazım.
Seçtiğim dizileri nasıl birleştirebilirim?

mesaj birleştirme:: 22 Ağustos 2015, 23:12:29

Alıntı yapılan: sayment - 22 Ağustos 2015, 23:09:25
Micro C'nin USB kütüphanesini tekrar inceledim. Kütüphane çok kısır, yeterli bilgi de verilmiyor ama Gen_Read() fonksiyonu iş yapabilir gibi. Alınan verinin uzunluğunu döndürüyor. Aldığın verinin uzunluğunu vericiye geri gönderip kalan kısmı ikinci bir paket olarak göndermesini isteyebilirsin.

http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/usb_hid_library.htm#hid_read

Peki aldığım 2. Diziyi ilk diziye nasıl eklerim?

Önerdiğiniz kitabın linkini atar mısınız?

sayment

X ve y elemanlı iki diziyi x+y elemanlı 3.bir diziye arka arkaya atarak birleştirebilirsin.

Hadi

Alıntı yapılan: sayment - 22 Ağustos 2015, 23:19:35
X ve y elemanlı iki diziyi x+y elemanlı 3.bir diziye arka arkaya atarak birleştirebilirsin.

Hocam işte bende bunu soruyorum. Hangi komutla? Veya nasıl? Bir örnek kod yazar mısınız?
Diyelim elimde bu 3 dizi var:

unsigned char dizi_1[] = {1,2,4};
unsigned char dizi_2[] = {7,3,5};
unsigned char dizi_3[6];


dizi_1 ve dizi_2 yi nasıl birleştirip dizi_3'e ata bilirim?

sayment

int a=0, b=0;
len = strlen(dizi1)+strlen(dizi2);
type dizi3[len];

while(a<strlen(dizi1)){
dizi3[a] = dizi1[a];
a++;
}


while(b<strlen(dizi2)){
dizi3[a] = dizi2[b];
a++;b++;
}

Hadi

Alıntı yapılan: sayment - 22 Ağustos 2015, 23:28:40
int a=0, b=0;
len = strlen(dizi1)+strlen(dizi2);
type dizi3[len];

while(a<strlen(dizi1)){
dizi3[a] = dizi1[a];
a++;
}

a++;

while(b<strlen(dizi2)){
dizi3[a] = dizi2[b];
a++;b++;
}


Hocam teşekkür ederim. Sadece bu satır ne işe yarıyor? bu satır da hata veriyor.

type dizi3[len];

sayment

dizi1 ve dizi2'nin boyutları toplamında dizi3'ü tanımlamak için ama hatalı olmuş. Dizi tanımlarken 'const' değişken bile kullanılmıyor. Şöyle tanımlarsak olabilir

#define len = strlen(dizi1)+strlen(dizi2)
Bunu da kabul etmez ise enum olarak tanımlarsan kabul ediyormuş. En son çare direk elle de yazabilirsin.

Bir de iki while arasındaki 'a++;' a gerek yok.

yamak

HID ile en fazla 64 byte gönderilebilir diye bişey yok.Sadece bir seferde 64 byte'lık report gönderilebilir.Report descriptor'da report count artırırsanız istediğiniz kadar data gönderebilirsiniz.Kullandığınız kütüphane gelen bu dataları zaten bi diziye ekleyip.Bittiğinde de bi callback vs fonsiyonu aracılığıyla okuyabilmeniz gerekiyo.Ama microC nin HID kütüphanesi bunu desteklemiyosa yapacak bişey yok.