KEIL'de union ve struct ile uğraşırken "packed" etmek için bu ifadeyi kullanıyorum.
#pragma pack(1)
Fakat bu ifadeyi projeye dahil ettiğimde Chan'in FatFs kütüphanesi çalışmıyor.
Bunun sebebini tam olarak anlamadım.
Takıldığı kısım okuma kısmı.
f_read(&fil, hdr, sizeof(hdr), &bytesread);
Bunun sebebi ne olabilir ?
Bu arada #pragma pack(1) ile "__packed"'ın farkı nedir ?
#pragma pack(1) i sonradan kaldirmaniz lazim. Pack 4 yazin isiniz bitince duzelecektir.
#pragma pack'in default ayarı sanırım 8, daha önce hiç kullanmadım. __packed den farkını da şurada yazmış kısaca.
http://www.keil.com/support/man/docs/armcc/armcc_chr1359124980173.htm
Ben işlemciler arası struct gönderip almak için veya fatfs'le dosyaya komple structı yazmak/okumak için _packed kullanıyorum, "padding" olmadığı için iki işlemci de aynı olursa transferi oldukça kolaylaştırıyor. Kayıtları tek tek okumaya gerek kalmıyor.
Tesekkurler, son olarak __packed bu isi tek seferlik mi yapiyor ? Yani sadece gecerli struct icin mi yapiyor ?
sadece tanımladığın struct için yapar, örnek :
typedef __packed struct RaporVeri{
float kayit[34];
uint8_t gun;
uint8_t ay;
uint16_t yil;
uint8_t saat;
uint8_t dakika;
uint8_t saniye;
}RaporVeri;
Evet hocam öyleymiş. Fakat keilde __packed'ı en başla yazmak gerekiyor.
Yani şu şekilde
Teşekkürler herkese
__packed typedef struct RaporVeri{
float kayit[34];
uint8_t gun;
uint8_t ay;
uint16_t yil;
uint8_t saat;
uint8_t dakika;
uint8_t saniye;
}RaporVeri;