Fonksiyonu tekrar çağıramıyorum

Başlatan ArifAhmet, 03 Ağustos 2015, 07:34:38

ArifAhmet

Merhabalar,
Elimde şöyle bir fonksiyon var.

int gpioCmdParse(int argc, char** argv){
			int mode_flag = 0;
      GPIO_InitTypeDef GPIO_InitDef;
      GPIO_TypeDef* gpioName;
			char portName;
			char readValue[16];
			char* pin_number;

			int option_index = 0;
      int c;
      
     
      while(1){
      c = getopt_long_only(argc, argv, "m:n:p:o:t:r:s:", gpio_cmd, &option_index);

      // Detect the end of the options.
      if (c == -1)
        break;

    switch (c){
        case 'm':
            if(!strcmp(optarg,MODE_INIT))
          		mode_flag = 1;
          	else if(!strcmp(optarg,MODE_WRITE))
            	mode_flag = 2;
          	else if(!strcmp(optarg,MODE_READ))
            	mode_flag = 3;
          	else{
            	//error
          	}
          	break;
        case 'n':
	        portName = optarg[0];
          	break;
        case 'p':
            GPIO_InitDef.GPIO_Pin = getPin(optarg);
          	pin_number=optarg;
          	break;
        case 'o':
          	GPIO_InitDef.GPIO_OType = getOtype(optarg);
          	break;
        case 't':
          	GPIO_InitDef.GPIO_Mode = getMode(optarg);
          	break;
        case 'r':
          	GPIO_InitDef.GPIO_PuPd = getPuPd(optarg);
          	break;
        case 's':
          	GPIO_InitDef.GPIO_Speed = getSpeed(optarg);
          	break;
        case '?':
          	// getopt_long already printed an error message.
          	break;
        default:
          	break;
        }
    }
	switch(portName){ 
        case cmdGPIOA:
            RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
            gpioName = GPIOA;
            break;
        case cmdGPIOD:
			RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
			gpioName = GPIOD;
            break;
        case cmdGPIOG:
            RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
            gpioName = GPIOG;
            break;
        default:
            //error
            break;
    }
    switch(mode_flag){
        case 1:
      		GPIO_Init(gpioName, &GPIO_InitDef);
				  chPrintln(CH_GPIO_INIT);
				//GPIO_SetBits(gpioName, getPin(pin_number));
      		break;
    	case 2:
      		GPIO_SetBits(gpioName, getPin(pin_number));
					chPrintln(CH_GPIO_WRITE);
      		break;
    	case 3:
      		sprintf(readValue,"Value = %d\n",GPIO_ReadInputDataBit(gpioName, GPIO_InitDef.GPIO_Pin));
      		chPrint(readValue);
      		break;
  	}
  
		return 0;
	}


ve şu şekilde çağırıyorum;
        gpioCmdParse(10,argv);
	gpioCmdParse(10,argv2);


İlk çağırmamda GPIO initialize yazısını ekranda görüyorum (bu arada stm32f429 kullanıyorum). Fakat 2. fonksiyonu çağırmıyor. Yani ekranda hiçbirşey görünmüyor (görünmesi gereken "GPIO Write"). argv2 parametresini alan fonksiyonu başa alıp tekrar yüklediğimde bu sefer "GPIO Write" yazısını alıyorum fakat 2. kez çağırdığım fonksiyon yine çalışmıyor. Pointer'lar ile ilgili bir sorun olduğunu düşünüyorum.
Yardımcı olabilirseniz çok sevinirim.

İyi çalışmalar.
Yaşasın Open Source!

pea

while(1){
      c = getopt_long_only(argc, argv, "m:n:p:o:t:r:s:", gpio_cmd, &option_index);

      // Detect the end of the options.
      if (c == -1)
        break;
  	}
  
        return 0;


c == -1 olmadan fonksiyondan dönme şansınız yok.

RaMu

int c;

Kullanılan derleyici "int" için ne tanımlıyor acaba?

Ben bunların yerine hep tam olarak ne ise öyle tanımlıyorum,
signed int8 c=0; gibi,
hatta her zaman ilk değer vermeyede özen gösteriyorum.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html