KEIL #pragma pack(1) FATFS'i çökertiyor

Başlatan baran123, 15 Eylül 2017, 19:19:30

baran123

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 ?

furkanyx

#pragma pack(1) i sonradan kaldirmaniz lazim. Pack 4 yazin isiniz bitince duzelecektir.

kimlenbu

#2
#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.

baran123

Tesekkurler, son olarak __packed bu isi tek seferlik mi yapiyor ? Yani sadece gecerli struct icin mi yapiyor ?

kimlenbu

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;

baran123

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;