Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: baran123 - 15 Eylül 2017, 19:19:30

Başlık: KEIL #pragma pack(1) FATFS'i çökertiyor
Gönderen: baran123 - 15 Eylül 2017, 19:19:30
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 ?
Başlık: Ynt: KEIL #pragma pack(1) FATFS'i çökertiyor
Gönderen: furkanyx - 15 Eylül 2017, 20:04:50
#pragma pack(1) i sonradan kaldirmaniz lazim. Pack 4 yazin isiniz bitince duzelecektir.
Başlık: Ynt: KEIL #pragma pack(1) FATFS'i çökertiyor
Gönderen: kimlenbu - 15 Eylül 2017, 20:58:44
#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.
Başlık: Ynt: KEIL #pragma pack(1) FATFS'i çökertiyor
Gönderen: baran123 - 15 Eylül 2017, 21:01:44
Tesekkurler, son olarak __packed bu isi tek seferlik mi yapiyor ? Yani sadece gecerli struct icin mi yapiyor ?
Başlık: Ynt: KEIL #pragma pack(1) FATFS'i çökertiyor
Gönderen: kimlenbu - 16 Eylül 2017, 10:13:00
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;
Başlık: Ynt: KEIL #pragma pack(1) FATFS'i çökertiyor
Gönderen: baran123 - 16 Eylül 2017, 12:15:42
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;