C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

ercan_t

merhaba
@leblebitozu,

fonksiyondan çıkmadan sadece döngüden çıkmak istiyorum.

mufitsozen

Alıntı yapılan: ercan_t - 07 Ocak 2014, 13:38:50
merhaba
@leblebitozu,

fonksiyondan çıkmadan sadece döngüden çıkmak istiyorum.

iki degisik yol ile yapabilirsiniz, ikisinide tavsiye etmem. sadece niye diye sormadan sorunuza cevap olsun diye oneriyorum.

1 - switch(mesaj-Stat) blogundan ciktigi yere asagidaki satiri ekleyiniz

     if (Done ==(mesaj-Stat)) break;

2- switch case blogunu if-elseif-else'e ceviriniz,
    ==Done elseif blogunun sonuna break; ekleyiniz 
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mistek

__IO ne için kullanılıyor?

__IO uint16_t falancadegisken;

neyi ifade eder?
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Tagli

Burada bir miktar açıklama var. Dediğine göre makro imiş ve derleyiciye göre açılımı farklı olabilirmiş. volatile ile aynı anlama gelme ihtimali yüksek.

uint16_t ise platformdan bağımsız işaretsiz 16 bitlik tamsayıyı ifade ediyor. Bunun yerine unsigned int de yazabilirsin ama bu dsPIC için olan bir derleyici tarafından 16 bitlik bir değişken olarak düşünülürken belki 32 bitlik bir ARM mimarisinde 32 bitlik bir değişken olarak derlenebilir. uint16_t yazınca, bu o platformda 16 bitlik işaretsiz değişken için ne olması gerekiyorsa ona açılıyor, mesela belki de ARM'da unsigned short oluyordur.
Gökçe Tağlıoğlu

fgokcegoz

Alıntı yapılan: mistek - 04 Şubat 2014, 21:11:14
__IO ne için kullanılıyor?

__IO uint16_t falancadegisken;

neyi ifade eder?

ARM Derleyicilerinde, "__IO" volatile manasına geliyor... O şekilde tanımlanmış... Birde bunun "__I", "__O" versiyonları bulunmaktadır...

#ifdef __cplusplus
  #define   __I     volatile             /*!< Defines 'read only' permissions                 */
#else
  #define   __I     volatile const       /*!< Defines 'read only' permissions                 */
#endif
#define     __O     volatile             /*!< Defines 'write only' permissions                */
#define     __IO    volatile             /*!< Defines 'read / write' permissions              */


"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

mistek

Cevaplar için teşekkürler. Düşündüğüm şey değilmiş.

extern'le aynı işi yapacak benzer bişey varmı.

Şöyle bi durum oluştu.

main.c içerisinde değişken tanımlıyorum ve diğer kütüphane dosyalarında bunu extern ile belirtip ulaşmaya çalışıyorum. Nasıl ifade edeceğim tam bilmiyorum. Normalde derlerken sorun yok hatasız derleniyor ancak program gerçek zamanlı çalışırken aslında bu değişkene hiç ulaşamıyor ve değerini değiştirmiyor.

Daha somut olması açısından; ADC-DMA okuma yapıyorum DMA nın buffer olacak kullanacağı diziyi main.c içerisinde tanımlayıp ADC.c içerisinde extern ile belirtiyorum. Derleme anında sorun yok normal derleniyor ama kodu çalıştırdığımda DMA bu diziye ulaşamıyor.

Eğer değişkeni ADC.c içerisinde tanımlayıp main.c içerisinde extern ile belirtirsem DMA buna ulaşabiliyor sorunsuz derliyor ve çalışıyor.

Böylede kullanıyorum ama değişkenler gözümün önünde olsun istiyorum, birde sebebini öğrenmek istiyorum
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Yuunus

Adc dosyasina extern tanimlayip ayni degiskeni main icerisine normal tanimlayip denermisin?

mistek

Alıntı yapılan: mistek - 04 Şubat 2014, 22:28:27

Daha somut olması açısından; ADC-DMA okuma yapıyorum DMA nın buffer olacak kullanacağı diziyi main.c içerisinde tanımlayıp ADC.c içerisinde extern ile belirtiyorum. Derleme anında sorun yok normal derleniyor ama kodu çalıştırdığımda DMA bu diziye ulaşamıyor.

boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Yuunus

Ben bu sekilde dizi tanimladim ve usb den gelen verileri sorunsuz okuyabiliyorum, baska bir problem olabilir mi?

mistek

Tek tek herşeyi denedim en son ADC dizisini tanımladığım yeri değiştirdim problem olmadı ama neden böyle olduğuna anlam veremiyorum. Keil 4.70'de derliyorum
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Yuunus


mistek

Stm32 std lib. kullanıyorum. Kendi oluşturduğum ADC.c ve ADC.h projeye dahil. Eğer siz normal olarak kullanabiliyorsanız mutlaka benim kodlarımda sorun vardır, göz atayım tekrardan.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Yuunus

mistek ben stnin kendi sample larini kullaniyorum , onlar uzerinde degisiklik yaparak proje olusturdum hatta extern  ile degiskeni tanimlayip baska bir tanimlama yapmadan static extern gibi degiskenin icindeki veriyi okudum,buna bile birsey demedi .

mistek

Hocam tanımlamada sorun yok normalde bende extern ile diğer kütüphane dosyalarında değişiklik yapıyorum ama DMA uygulamasında garip davrandı.Daha doğrusu önceden böyle kullanıyordum. Derleyici bişey demiyor kod normal olarak çalışıyor ancak adc verilerinin yazılacağı diziyi okuduğumda hep içeriği 0 okuyorum.

Adc dizisini kendi dosyasında tanımlarsam ve main.c'de okursam dma verileri bu diziye yazmış oluyor ve 0 dan farklı değer okuyorum. Sanki Keil kod tamamlama yaparken benim dizimi başka bir yere bağlıyor. DMA da yolu şaşırıyor. Eski bilgisayarımda derlediğimde(Keil 4.72) her iki durumda da sorunsuz çalışıyordu çünkü. Bi ara 4.72 yükleyeceğim tekrar denerim.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

yldzelektronik

Merabalar,

typedef struct _direntry 
{ 
   char   sName[8]; 
   char   [spam][3]; 
   char   bAttr; 
   char   bReserved[8]; 
      int16 hClusterH; 
   int16   hTime; 
   int16   hDate; 
   int16   hCluster; 
   int32   wSize; 
} DIR;


Şeklinde bir tanımlama var.Ancak bu yapı içinde

char [spam][3] şeklinde bir ifade var.Bu yapıyı kullanırken -char [spam][3] kısmında- ;
DIR beDir;
beDir->[spam][i];

şeklinde kullanmış.Yani ısrarla [spam][3] yapısına sağdık kalmış.Bu nasıl bir tanımlamadır?Özelliği nedir?

Ben bunu derlerken hata alıyorum.Çünkü dikkat edilirse char ifadesinden sonra hiçbir değişken adı yer almamış.

Bu hatayı nasıl giderebilirim?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.