Airhmi editörü ve 4.3'' advanced ekran üzerinde yapmaya çalıştığım bir proje var ancak 50ms lik bir timer içerisinde kullandığım uartDataGet() fonksiyonu sorun çıkartıyor.
Öncelikle ekran içerisinde 120 adet Image var ve bu fotoğraflardan bir tanesini gelen uart verisine göre visible=True konumuna getiriyorum. Ancak şöyle bir sorun oluşuyor. Kodu ekrana sd card ile yüklüyorum ancak sonrasında ekranın ilk açılışındaki progress bar %100 konumuna geliyor ve ekran hiçbir uyarı vermeden kapanıyor tekrar ilk açılış yükleme ekranına düşüyor. Fotoğrafların bir kısmını ekrandan silince ekran sorunsuz bir şekilde çalışıyor ancak belli bir sayının üstüne çıkınca ekran yükleme kısmında takılı kalıyor. İlginç olan ksıım ise timer içerisindeki koddan uartDataGet() fonksiyonunu yorum haline getirince ekran sorunsuz bir şekilde açılıyor ve 120 adet fotoğraf ile birlikte çalışıyor ancak bu seferde uart verisini alamadığım için fotoğraflar değişmiyor. Sorunun nerede olduğunu çözebilmek için 0 dan 120 ye artan bir değişkenle fotoğrafları test ettim sorunsuz bir şekilde çalıştı. İşin içine uart verisi almak ve uartDataGet() fonskiyonu girince sorun yaşamaktayım.
Bu konularda bilgim kısıtlı olduğu için sorunun nereden kaynaklandığını bulamadım o yüzden buradan paylaşmak ve sorunun kaynağını bulmak istiyorum.Kodun çalışmasında ve fotoğrafları tek tek gösteriminde herhangi bir sıkıntı yok onu belirteyim ortalama 60 adet fotoğraf ekrana yüklüyken sorunsuz bir şekilde çalışmakta. Timer içerisinde kullandığım kod şu şekilde: #include "stk.h" #include "stdio.h" int uartSize; int DMrawDeg; int maxDeg; int minDeg; int scaledDeg; int smoothDeg; int merkezAyar; int lastImg; VarGet("minDeg",&minDeg); VarGet("maxDeg",&maxDeg); VarGet("smoothDeg",&smoothDeg); VarGet("merkezAyar",&merkezAyar); VarGet("lastImg",&lastImg); char uartData[5000]; uartDataGet(uartData, &uartSize); if (uartSize >= 0 && uartSize < sizeof(uartData)) { uartData[uartSize] = '\0'; LabelSets("Mlabel1",uartData); } else { uartData[0] = '\0'; uartSize = 0; } if (uartSize > 0) { int parsedValues = sscanf(uartData, "A:%d;", &DMrawDeg); } if (minDeg != maxDeg) { scaledDeg = merkezAyar + (DMrawDeg - minDeg) * 120 / (maxDeg - minDeg); } if (smoothDeg < scaledDeg) { smoothDeg++; } if (smoothDeg > scaledDeg) { smoothDeg--; } if (smoothDeg < 0) { smoothDeg = 0; } if (smoothDeg > 120) { smoothDeg = 120; } if(smoothDeg != lastImg) { if (lastImg >= 0 && lastImg <= 120) { char prevImg[10]; sprintf(prevImg ,"EImage%d", lastImg); ImageSet(prevImg, "Visible", "False"); } if(smoothDeg > 1) { char currentImg[10]; sprintf(currentImg ,"EImage%d", smoothDeg - 1); ImageSet(currentImg, "Visible", "True"); lastImg = smoothDeg; } } VarSeti("lastImg",lastImg ); VarSeti("smoothDeg",smoothDeg );