dizileri birleştirme yardım ?

Başlatan koray692, 01 Şubat 2016, 01:36:12

koray692

merhabalar ben iki diziyi birleştirmek istiyorum mesela  birinci dizinin içinde 1111 bilgisi var ikinci dizide 0101 var birleştiğinde 11110101 olacak bu işlemi en az bellek ve işlemci kullanarak nasıl yapabilirim ?

yldzelektronik

strcat fonksiyonunu kullanabilirsiniz
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Karamel

Strlen ile boylarini bulup. Ardindan for loop ile digerinin ardina yazabilirsiniz ustadim. Bu function kullanmaktan daha az yer kaplayabilir. Yer sorunu yoksa library functionlarida kullanilabilir.

mir_as82

Hocam iki dizinin boyutuda onceden belli ise o zaman üçüncü dizinin de boyutu belli demektir. Eğer ahım şahım bir yer kaplamiyorsa baştan hepsi için yer al. Malloc ile falan uğraşma.

Gökhan BEKEN

1 byte ile tutabileceğiniz bir veri için 8 byte harcamaya neden ihtiyaç duydunuz?
Özel mesaj okumuyorum, lütfen göndermeyin.

muhendisbey

veri tipi olarak string kullanıp += ile iki stringi toplatabilirsin.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

koray692

#6
merhabalar çok teşekkür ederim yardımlarınız için ben strcat fonksiyonunu kullanmaya karar verdim. aşşağıda ki gibi yaptım ancak sonuçlar istediğim gibi olmadı.
ACCx[2];
strcat( ACCx," alinan_veri[0]") ;
strcat( ACCx," alinan_veri[1]") ;




sensor den verileri 8 er bit olarak alıyorum...integer verileri string ile ilgili bir fonksiyonla nasıl yapılabildiğini pek anlamadım aslında.. çok bilgim ve deneyimim yok yazılım konusunda ...tırnaklar olmayacak sanırım kaldırdım denedim ama ikisi birlikte 16 bit olduğu için bir arraya sığmıyor sanırım ne yapmam lazım.

muhendisbey

böyle bir yapıda string kullan. str adı üzerinde string kütüphanesinin bir fonksiyonu zaten. Farklı ver tiplerinde hata çıkarması muhtemel.

http://www.cplusplus.com/reference/cstring/strcat/?kw=strcat

Böyle bir veri birleştirmesi sonucunda tekrar kullanımı çok zor bir yapı elde edersin. Seri porttan göndermek için yapıyorsan yapmana gerek yok. Doğrudan sırayla print et.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

koray692

i2c ile alıyorum verileri ; sizce doğru bir yaklaşım mı verileri almak için daha iyi yöntemler var mı ?

for (register_of_accel=59 ;register_of_accel<61;register_of_accel++ )

                {

                    data_[0] = register_of_accel;  // register başlangıç yeri
                    I2C1_Start();        // issue I2C start signal
                    I2C1_Write(0x68,data_,1,END_MODE_RESTART);
                    I2C1_Read(0x68,data_ ,1,END_MODE_STOP);
                    delay_ms(5);
                    alinan_veri[c]=data_[0];
                    c++;

                }

Cemre.

void MPU_I2C_Read(unsigned char s_addr, unsigned char r_addr, unsigned char len, unsigned char *dat) {
  unsigned int i;
  I2C1_Start();                      // issue I2C start signal
  I2C1_Wr(s_addr & 0xFE);            // send byte via I2C  (device address + W(&0xFE))
  I2C1_Wr(r_addr);                   // send byte (data address)
  I2C1_Repeated_Start();             // issue I2C signal repeated start
  I2C1_Wr(s_addr | 0x01);            // send byte (device address + R(|0x01))
  for (i = 0; i < (len-1); i++){
    *dat++ = I2C1_Rd(_I2C_ACK);      // Read the data (acknowledge)
  }
  *dat = I2C1_Rd(_I2C_NACK);         // Read the data (NO acknowledge)
  I2C1_Stop();                       // issue I2C stop signal
}



http://www.libstock.com/projects/view/1002/mpu-imu-click-example

pea

#10
Alıntı yapılan: koray692 - 01 Şubat 2016, 01:36:12
merhabalar ben iki diziyi birleştirmek istiyorum mesela  birinci dizinin içinde 1111 bilgisi var ikinci dizide 0101 var birleştiğinde 11110101 olacak bu işlemi en az bellek ve işlemci kullanarak nasıl yapabilirim ?

String konusuna neden girilmiş anlamadım.
uint8_t dizi1 = 0b1111;
uint8_t dizi2 = 0b0101;
uint8_t birlesmisDizi;

birlesmisDizi = (dizi1<<4) + (dizi2&0b1111);


Bu şekilde yapabilirsiniz.
dizi1'i  4 bit sola kaydırınca "0b11110000" elde ediliyor. dizi2'yi "0b1111" ile and'leyince de en düşük değerli 4 biti dikkate alınmış oluyor. Yani 0b11110000 + 0b00000101 = 0b11110101 elde edilir.

Not: uint8_t tanımlı olmayabilir. "stdint.h" kütüphanesini ekleyebilirsiniz: http://www.cplusplus.com/reference/cstdint/
Ya da compiler'ınız byte için ne kabul ediyorsa onu kullanabilirsiniz.

koray692

compiler olarak mikroc for arm kullanıyorum dediğiniz kütüphane programın yüklü olduğu yerde includes klasörü içinde görünüyor hatta yeni bir tane daha indirdim onu kopyaladım klasörün içine yine de olmadı özel bir şey mi yapmak gerekiyor anlamadım.

pea

Unsigned char da kullanabilirsiniz. Uint8_t'ye tekabül eder.

koray692

#13
sorun şu ki ben iki tane 8 bitlik veriyi birleştirecem :) unsigned int olur sanırım?

pea

Verileri 4 bit'lik gösterdiğiniz için sonuç tipi olarak uint8_t önerdim.
8 bit'lik 2 veri kullanacaksanız, uint16_t kullanırsınız.
unsigned int, ARM'da 32bit'lik veri yapısına, uint32_t'ye tekabül eder. Kullanabilirsiniz, sıkıntı olmaz, fazladan 2 byte'lık yer harcamış olursunuz sadece.

unsigned int birlesmisDizi = (dizi1<<4) + (dizi2&0b1111);