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);
}
struct
{
uint8_t Ad[32], Soyad[32], No[4];
}xxx;
void eeprom_yaz (void)
{
HAL_SPI_Transmit(&hspi2, (void *)&xxx, 68, 1);
}
dene bakalim
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.
hatami uyarimi?
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);
}
@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.
@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?
@yldzelektronikuint8_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-ARMkolay gelsin