lpc1769 da çok boyutlu diziye deger atınca kitleniyor !!!

Başlatan burakoz1989, 31 Ağustos 2012, 13:04:43

fatih6761

Problemin kaynağı var değişkeni değil. Kesin olarak bir sorun varmı : Evet var. Sıra değişkeni halâ ilklendirilmemiş. Yani sprintf fonksiyonu sira adresine yazmaya çalışınca sorun çıkıyor. İşlemci yazma korumalı bellek veya bu tarzda bir hata fırlatıyor. Gerekli rutin işletiliyor. Bu rutinle birlikte işlemci sonsuz döngüye sokuluyor. Yani yapmanız gereken
static int sira[32];
// ...
static int *sira;
void main()
{
     sira = (int*)malloc(32);
     //...
}

burakoz1989

#16
Alıntı yapılan: yamak - 01 Eylül 2012, 19:11:39
Hatan muhetemele söyledğim nedenden kaynaklanıyo.char* sira  yi yerel tanimladiğinda belleğin güvenliği olmayan bir bölgesinden bi adres tahsis etmiş oluyosun ve bu adrese bir değer yüklemeye çalıştığın hata oluşuyo.Ve bu tip hatalar çalışma zamanında ortaya çıkar. Şimdi global tanımlamışsın tamam güvenli bi yerden 1 byte yer tahsis ediyosun ama sen bu adrese 1 byte tan fazla veri yüklüyosun bu yüzde global de tanımlasan yerel de tanımlasan malloc ile güvenli bir şekil yer tahsis etmelisin. Hatanın ortadan kalkmasının asıl nedeni o bence var değişkenini kullanmaman değil sira değişkenin gösterdiği adrese hiç bir veri yüklememendir.
anladım hocam çok teşekkür ederim hepinize deneyip hemen dönecem

mesaj birleştirme:: 01 Eylül 2012, 19:33:42

Alıntı yapılan: fatih6761 - 01 Eylül 2012, 19:16:03
Problemin kaynağı var değişkeni değil. Kesin olarak bir sorun varmı : Evet var. Sıra değişkeni halâ ilklendirilmemiş. Yani sprintf fonksiyonu sira adresine yazmaya çalışınca sorun çıkıyor. İşlemci yazma korumalı bellek veya bu tarzda bir hata fırlatıyor. Gerekli rutin işletiliyor. Bu rutinle birlikte işlemci sonsuz döngüye sokuluyor. Yani yapmanız gereken
static int sira[32];
// ...
static int *sira;
void main()
{
     sira = (int*)malloc(32);
     //...
}




hocam busefer de bu hataları verdi
main.c(85): warning:  #223-D: function "malloc" declared implicitly
main.c(71): error:  #147: declaration is incompatible with "int sira[32]" (declared at line 68)

yamak

2 adet sira isimli değişkenin var onların birinin ismini değiştirmelisin

burakoz1989

Alıntı yapılan: yamak - 01 Eylül 2012, 19:41:13
2 adet sira isimli değişkenin var onların birinin ismini değiştirmelisin
hocam kodun son hali bu ama denetleyicide hiç bir tık yok :(
#include <LPC17xx.h>
#include <LPC17xx.H>
#include <stdio.h>
#include <LPC17xx.H>
#include <LPC17xx.H>
#include <string.h>
#include "delay.h"
#include "ks0108.h"

static const char   gkod[1][35][4]={"G00","G01","G02","G03","G04",
                        "G17","G18","G19","G20","G21",
                        "G28","G29","G40","G41","G42",
                        "G50","G51","G54","G70","G71",
                        "G80","G83","G90","G91","G92",
                        "M00","M01","M02","M03","M04",
                        "M05","M06","M08","M09","M30", };



 koddzlt(char t[][50],const char*s, char k, char l )  
   {
          
  static  int c=0;
  static  int i=0;
      for(i=0;i<strlen(s);i++)
       {
          
          if(s[i]==k)
           {
               int b=0 ;     
               while(s[i]!=l)
               {  
                 
                            
               t[c][b]=s[i];
               
               b++;
               i++;
                  
               }
              t[c][b] = '\0';
                                                             // i=strlen(s);
              c++;
           }
       }
   
                     
   }


int uygunkod (char s[])                          //gönderilen fonksiyonun satırında gkod dizisinin elemanı varmı 
  {                                       // yomu diğe arar varsa 1 yoksa o gönderiri
          static   int a=0;                            //kaç tane olup  olmadığına bakmaz
          static   int i;
        for(i=0; i<34; i++)
             {              
                
                if(strstr(s,gkod[0][i])!=0)
                {
                     a=i;     
                          } 
              }
    return a ; 
}


//static char sira[32];


static char *sira;



 static const char cnc1[]="cnc1% N05 G00 X0.0 Y0.0;N10 F400;N15 G01 Z-10.0;N20 F600;N25 G01 X50.0 Y50.0;N30 G01 Z0.0;N31 G42 Z-10 R25;N35 M30;  %";          //const char
	static char genel[7][50]; 
	
	
	static int var;

int main (void)
{	
	  

	sira = (char*)malloc(32);										

    SystemInit ();
	SysTick_Config(12000000/1000);
	LPC_PINCON->PINSEL4=0;   // Pinsel4() GPIO olarak ayarlaniyor
	LPC_GPIO4->FIODIR = 0xFFFFFFFF;  // GPIO 4'lerin hepsi çıkış oluyor

    ks0108_init();
    koddzlt(genel,cnc1,'N',';');
	  var=uygunkod(genel[3]);

    for(;;)
    {
	 

    LPC_GPIO4->FIOSET |= (1<<28);				//port4'ın 	28. bitini high yapıyoruz
	LPC_GPIO4->FIOSET |= (1<<29);					//port4'ın 	29. bitini high yapıyoruz
	DelayMs(250);
	LPC_GPIO4->FIOCLR |= (1<<28);					//port4'ın 	28. bitini low yapıyoruz
	LPC_GPIO4->FIOCLR |= (1<<29);			//port4'ın 	29. bitini low yapıyoruz


	




	

        DelayMs(250);DelayMs(250);DelayMs(250);DelayMs(250);
        ks0108_fill(0);
		sprintf(sira,"sıra:%d",var);
        ks0108_text(1,10,sira,1,1);

        DelayMs(250);
		DelayMs(250);
		DelayMs(250);

		        ks0108_text(1,20,genel[2],1,1);

        DelayMs(250);
		DelayMs(250);
		DelayMs(250);

		        ks0108_text(1,30,genel[3],1,1);

        DelayMs(250);
		DelayMs(250);
		DelayMs(250);

		        ks0108_text(1,40,genel[4],1,1);

        DelayMs(250);
		DelayMs(250);
		DelayMs(250);

		        ks0108_text(1,50,genel[5],1,1);

        DelayMs(250);
		DelayMs(250);
		DelayMs(250);

		        ks0108_text(1,60,genel[6],1,1);

        DelayMs(250);
		DelayMs(250);
		DelayMs(250);
//      

    }
}

fatih6761

malloc declared implicitly dediğine göre <stdlib.h> dosyasını eklememişsiniz. malloc fonksiyonu stdlib de bulunur. Zaten bu haliyle derlenmemesi gerekir.
#include <stdlib.h> ekleyin.

burakoz1989

#20
//static int sira[32];
// ...
static int *sira;
void main()
{
     sira = (int*)malloc(32);
     //...
}

böyle tanımladığımda
çalışmıyoru yukardaki uyarının aynısını veriyor
fakat
static int sira[32];

böyle tanımlayınca çalıştı

mesaj birleştirme:: 01 Eylül 2012, 19:54:26

Alıntı yapılan: fatih6761 - 01 Eylül 2012, 19:50:05
malloc declared implicitly dediğine göre <stdlib.h> dosyasını eklememişsiniz. malloc fonksiyonu stdlib de bulunur. Zaten bu haliyle derlenmemesi gerekir.
#include <stdlib.h> ekleyin.
hocam beni kırmayıp sorularımı cevapladığınız için çok teşekkür ederim dinamik bellek yönetiminde neredeyse sıfırım oturup ona iyice çalışacam gerçekten çok saolun :)

fatih6761

static int sira[32];

ile
static int *sira;
void main()
{
      sira = (int*)malloc(32);
}

Arasında önemli bir fark yok. Uyarı vermesinin ve derlememesinin sebebi de stdlib başlık dosyasının eklenmemiş olması.
İki şekilde de bellekte tanımlanır...

burakoz1989

Alıntı yapılan: fatih6761 - 01 Eylül 2012, 19:54:56
static int sira[32];

ile
static int *sira;
void main()
{
      sira = (int*)malloc(32);
}

Arasında önemli bir fark yok. Uyarı vermesinin ve derlememesinin sebebi de stdlib başlık dosyasının eklenmemiş olması.
İki şekilde de bellekte tanımlanır...
hocam kütüphaneyi ekleyince düzgün çalıştı fakat kütüphaneyi eklemedende derliyo anlamadım ama ekleyince gayet güzel çalıştı çok saolun

fatih6761


burakoz1989

Alıntı yapılan: fatih6761 - 01 Eylül 2012, 20:00:14
Rica ederim. İyi çalışmalar...
hocam bir şey daha sormak istiyorum programım gayet güzel çalışıyo fakat debug da warning 1122 hatası veriyo nedenini biliyormusunuz acaba

fatih6761

Uyarının devamında başka bir not var mı ? Keil dökümanında
Warning 1122 => __asm function cannot have static qualifier
deniyor ama kodda herhangi bir inline assembly kodu yok. Eklenen kütüphane dosyalarında basitçe __asm kelimesini arayabilirsiniz. Belki bir sonuç elde ederiz...

burakoz1989

#26
Alıntı yapılan: fatih6761 - 01 Eylül 2012, 20:36:02
Uyarının devamında başka bir not var mı ? Keil dökümanında
Warning 1122 => __asm function cannot have static qualifier
deniyor ama kodda herhangi bir inline assembly kodu yok. Eklenen kütüphane dosyalarında basitçe __asm kelimesini arayabilirsiniz. Belki bir sonuç elde ederiz...
hocam buldum galiba core_cmInstr.h dosyadında
şöyle kod satırı static tanımlanmış;
static __INLINE __ASM uint32_t __REV16(uint32_t value)

hocam bide bu keilin hata kodlarının bulunduğu dosya nasıl ulşabilirim acaba

mesaj birleştirme:: 01 Eylül 2012, 20:59:53

hocam hata kodlarını buldum google yazmak yeterliymiş :)

fatih6761

Bulduğun kodda bir sorun olduğunu zannetmiyorum. O dosya CM mimarisine ait header dosyalarından. Eğer çalışma zamanında sorun yaratmıyorsa uyarıyı şimdilik önemsemeyebilirsin.

burakoz1989