Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: 8051-ARM - 17 Temmuz 2017, 17:49:11

Başlık: struct, union vs.
Gönderen: 8051-ARM - 17 Temmuz 2017, 17:49:11
Merhaba Arkadaşlar,

Bu kodlar ile istediğim veriyi eeproma yazdırabiliyorum.



uint8_t  Ad[32], Soyad[32], No[4];

void eeprom_yaz (void)
{
HAL_SPI_Transmit(&hspi2, Ad, 32, 1);
HAL_SPI_Transmit(&hspi2, Soyad, 32, 1);
HAL_SPI_Transmit(&hspi2, No, 4, 1);
}


Fakat ben bunları tek seferde yazdırmak istersem struct, union vs ile nasıl  yazdırabilirim.


void eeprom_yaz (void)
{
HAL_SPI_Transmit(&hspi2, xxx, 68, 1);
}

Başlık: Ynt: struct, union vs.
Gönderen: OptimusPrime - 17 Temmuz 2017, 19:39:51

struct
{
uint8_t  Ad[32], Soyad[32], No[4];
}xxx;



void eeprom_yaz (void)
{
HAL_SPI_Transmit(&hspi2, (void *)&xxx, 68, 1);
}


dene bakalim
Başlık: Ynt: struct, union vs.
Gönderen: 8051-ARM - 17 Temmuz 2017, 20:11:52
Alıntı yapılan: OptimusPrime - 17 Temmuz 2017, 19:39:51

struct
{
uint8_t  Ad[32], Soyad[32], No[4];
}xxx;



void eeprom_yaz (void)
{
   HAL_SPI_Transmit(&hspi2, (void *)&xxx, 68, 1);
}


dene bakalim


Hocam öncelikle cevabınız için teşekkürler burası hariç "(void *)" denemiştim hata veriyordu sabah ilk iş deneyeceğim.
Başlık: Ynt: struct, union vs.
Gönderen: OptimusPrime - 17 Temmuz 2017, 20:29:34
hatami uyarimi?
Başlık: Ynt: struct, union vs.
Gönderen: baran123 - 18 Temmuz 2017, 04:00:58
Bir örnek de benden.

#include <stdio.h>
#include <stdlib.h>

#define LEN_OF_DATA1        (2)
#define LEN_OF_DATA2        (2)
#define LEN_OF_DATA3        (4)

#define LEN_OF_DATA_TEMP    (LEN_OF_DATA1 + LEN_OF_DATA2 + LEN_OF_DATA3)

typedef union
{
    struct {
        int temp[LEN_OF_DATA_TEMP];
    };
    struct {
        int data1[LEN_OF_DATA1];
        int data2[LEN_OF_DATA2];
        int data3[LEN_OF_DATA3];
    };
}DataPacket_t;

void HAL_SPI_Transmit(int buf[], int len)
{
    int i;
   
    for (i = 0; i < len; i++)
    {
        printf("%d\n\r", buf[i]);
    }
}

int main(void)
{
    DataPacket_t myDataPacket;
   
    myDataPacket.data1[0] = 10;
    myDataPacket.data1[1] = 11;
   
    myDataPacket.data2[0] = 12;
    myDataPacket.data2[1] = 13;
   
    myDataPacket.data3[0] = 14;
    myDataPacket.data3[1] = 15;
    myDataPacket.data3[2] = 16;
    myDataPacket.data3[3] = 17;
   
    HAL_SPI_Transmit(myDataPacket.temp, LEN_OF_DATA_TEMP);
   
    return (0);
}
Başlık: Ynt: struct, union vs.
Gönderen: 8051-ARM - 18 Temmuz 2017, 10:59:24

@OptimusPrime


Hata veriyordu hocam şimdi sıkıntı yok sormadan önce özellikle yapıları inceledim yapının tümüne erişimde başarılı olamadım  "(void *)" bu şekilde bir örnekte görmedim tekrardan çok teşekkür ederim.


@baran123

Hocam sizin verdiğiniz örnek ve cevap içinde çok teşekkür ederim.


Başlık: Ynt: struct, union vs.
Gönderen: yldzelektronik - 18 Temmuz 2017, 11:09:34
@OptimusPrime  bir sorum var.


HAL_SPI_Transmit

fonksiyonu sanki uint8_t * alıyordu. Bu durumda void * olarak değil de uint8_t * olarak cast etsek ne olur?Hangisi daha doğru?
Başlık: Ynt: struct, union vs.
Gönderen: OptimusPrime - 18 Temmuz 2017, 16:58:33
@yldzelektronik
uint8_t* tipinden parametre aliyorsa uint8_t* ye donusturulse daha iyi olur fakat void* de gecerlidir. void* kisaca benim elimden bu geliyor sen neye donusturmek istiyorsan donustur kullan. adresini biliyorsun diyorsun, demek. buna uyari verebilir ama kizmasini anlayamadim.


@8051-ARM
kolay gelsin