Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: tekosis - 19 Kasım 2018, 18:16:01

Başlık: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: tekosis - 19 Kasım 2018, 18:16:01
Herkese kolay gelsin.
Bu program parçacığında dma ile adc okunduktan sonra okuma tamamlanınca dma kesmesi oluşuyor ve kesme içinde
adc_verisi_hazirmi=1 yapılıyor. while döngüsünün içini boş bırakırsam veya aşağıdaki şekilde bir kullanım yaptığımda(herhangi bir değişkene öylesine değer yüklediğimde) sistem cevap vermiyor, program while döngüsünden çıkamıyor.
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)adcDt,8);
 while(adc_verisi_hazirmi==0){ 
 degiskenX=0;//*******
 }
 adc_veri[0]= (adcDt[0] + adcDt[1] + adcDt[2] + adcDt[3] + .........

ama while içinde rasgele bir değişkene değer yüklemek yerine aşağıdaki gibi while içinde bir ledi yakarsam kod sıkıntısız işliyor, kesme oluşunca while döngüsünden  çıkabiliyorum. Bunun sebebi ne olabilir?
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)adcDt,8);
 while(adc_verisi_hazirmi==0){ 
 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);//*******
 }
 adc_veri[0]= (adcDt[0] + adcDt[1] + adcDt[2] + adcDt[3] + .........
Başlık: Ynt: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: Yuunus - 19 Kasım 2018, 18:46:58
break; neden kullanmiyorsunuz, sorun mu cikariyor.
Başlık: Ynt: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: mufitsozen - 19 Kasım 2018, 19:05:47
Alıntı yapılan: tekosis - 19 Kasım 2018, 18:16:01Bunun sebebi ne olabilir?
@tekosis

adc_verisi_hazirmi degiskenini volatile tanimlayin

yada

compiler optimizasyonlarini kapatiniz.

Forumda bu konular 4759 kere (yaklasik olarak) konusulmustu, o basliklari inceleyebilirsiniz.
Başlık: Ynt: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: ecunnu - 19 Kasım 2018, 19:15:10
adc_verisi_hazirmi degiskenini volatile tanimlarsan sorunun cozulebilir. Kolay gelsin.
Başlık: Ynt: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: tekosis - 20 Kasım 2018, 00:20:03
@digiman @ecunnu teşekkür ederim problem "volitale" ile halloldu.
@mufitsozen hocam size de teşekkür ederim. Ayrıca "4759 kere (yaklasik olarak) konusulmustu" demişsiniz, haklısınız. yorgunluktan googleye bakmak bile aklıma gelmedi.
Başlık: Ynt: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: mufitsozen - 20 Kasım 2018, 00:28:27
Alıntı yapılan: tekosis - 20 Kasım 2018, 00:20:03@digiman @ecunnu teşekkür ederim problem "volitale" ile halloldu.
@mufitsozen hocam size de teşekkür ederim. Ayrıca "4759 kere (yaklasik olarak) konusulmustu" demişsiniz, haklısınız. yorgunluktan googleye bakmak bile aklıma gelmedi.


hangi compiler kullaniyorsun bilemiyorum ama "volitale" ile sorun cozulmez, illaki derleme sirasinda hata verir.  :P
Başlık: Ynt: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: tekosis - 20 Kasım 2018, 02:09:17
beynim yandı hocam :)

https://youtu.be/roq4cgowuSs?t=19
Başlık: Ynt: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: LukeSkywalker - 20 Kasım 2018, 07:38:44
http://bilgisayarkavramlari.sadievrenseker.com/2010/06/26/volatile-tip-tanimlayicisi/
Başlık: Ynt: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: argelojik - 20 Kasım 2018, 13:36:31
Yeri gelmişken bu optimizasyonlar konusunu birisi açıklayabilir mi? Çok basit bir hatada 2 günüm gitmişti bu yüzden. Ben tam olarak optimizasyon kısmını anlayamadım. bir de heap size ve stack size konusu var bunu da tam anlayamadım. Bu konuda 4759 kere konuşuldu mu bilmiyorum ama.Teşekkürler
Başlık: Ynt: while döngüsünin içi boş olunca döngüden çıkılamıyor.
Gönderen: RaMu - 20 Kasım 2018, 23:26:33
Alıntı yapılan: argelojik - 20 Kasım 2018, 13:36:31...
 Ben tam olarak optimizasyon kısmını anlayamadım. bir de heap size ve stack size konusu var bunu da tam anlayamadım. Bu konuda 4759 kere konuşuldu mu bilmiyorum ama.Teşekkürler
Yok onlar en fazla 4758 defa (yaklaşık olarak) konuşulmuştur.

Bu sorular ben mevsimlerin nasıl oluştuğunu anlayamadım diyen bir coğrafyacı tadında oluyor.
Cevabı her yerde var yalnız temel birkaç konunun bilinmesi gerekiyor anlamak için.
Lojik kapılar, flip flop lar, işlemci mimarisi, mcu yapısı, opcode lar
bilinirse zaten anlamış olursunuz.
İngilizce kaynak isterseniz birkaç video önerebilirim.