cancel
Showing results for 
Search instead for 
Did you mean: 

The program cannot start after commenting out a line of code

BOEINGNG
Associate II

The main function code is as follows:

 

 

while (1)
    {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        loop_cnt++;

        //HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
        if(13 == ((loop_cnt >> 4) & 0x0f))
            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
        else if (15 == ((loop_cnt >> 4) & 0x0f))
            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
		
        HAL_IWDG_Refresh(&hiwdg);

        if(HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_13))
        {
            HAL_GPIO_WritePin(GPIOD, GPIO_PIN_6, GPIO_PIN_RESET);
        }
        else
        {
            HAL_GPIO_WritePin(GPIOD, GPIO_PIN_6, GPIO_PIN_SET);
        }

        //print_log("w5500 link STA %d\r\n", (Read_W5500_1Byte(PHYCFGR)&LINK));
        #if 1

        if((getPHYCFGR() & 0x01) != link_state)
        {
            link_state = (getPHYCFGR() & 0x01);

            if((getPHYCFGR() & 0x01) == 0)
            {
                beep_voice(1, 200);
                close(2);
                S_State[2] = 0;
                close(3);
                S_State[3] = 0;
                close(4);
                S_State[4] = 0;
                close(5);
                S_State[5] = 0;
            }
            else
            {
                beep_voice(2, 50);
                print_log("w5500 link\r\n");
            }
        }
		else if(memcmp(gSystemParam.deviceIp, gSystemParam.gateway, 3) == 0) // check gateway
        {
            //tmpTciks = g64msTicks;
            // handle webserver
            do_http(0);
            //print_log("do_http %lld\r\n", g64msTicks - tmpTciks);

            //tmpTciks = g64msTicks;
            // handle NTP services
            //ntpServices();
            //print_log("ntpServices %lld\r\n", g64msTicks - tmpTciks);

            //tmpTciks = g64msTicks;
            netAppServices();
            //read_net_app();
            //print_log("netAppServices %lld\r\n", g64msTicks - tmpTciks);
        }

        // handle uart message, include uart1 uart2 uart3
        cmdMachine();
		
        #endif

    }

 

 

After commenting out do_http(0); on line 54, the program cannot start. What is the problem?

The do_http function code is as follows:

 

char rx_buf[MAX_URI_SIZE] = {0};


void do_http(uint8_t sn)
{
  unsigned short len;

  st_http_request *http_request;
  memset(rx_buf,0x00,MAX_URI_SIZE);
  http_request = (st_http_request*)rx_buf;		// struct of http request  
  /* http service start */
  switch(getSn_SR(sn))
  {
    case SOCK_INIT:
      //listen(sn);
      break;
    case SOCK_LISTEN:
      break;
    case SOCK_ESTABLISHED:
    //case SOCK_CLOSE_WAIT:
      if(getSn_IR(sn) & Sn_IR_CON)
      {
        setSn_IR(sn, Sn_IR_CON);
      }
      if ((len = getSn_RX_RSR(sn)) > 0)		
      {
        len = recv(sn, (unsigned char*)http_request, len); 
        *(((unsigned char*)http_request)+len) = 0;
        //proc_http(sn, (unsigned char*)http_request); // request is processed
        disconnect(sn);
				//printf("SOCK_ESTABLISHED %04x\r\n", len);
      }
      break;
    case SOCK_CLOSE_WAIT:   
      if ((len = getSn_RX_RSR(sn)) > 0)
      {
        //printf("close wait: %d\r\n",len);
        len = recv(sn, (unsigned char*)http_request, len);       
        *(((unsigned char*)http_request)+len) = 0;
        //proc_http(sn, (unsigned char*)http_request); // request is processed
				//printf("SOCK_CLOSE_WAIT %04x\r\n", len);
      }
      disconnect(sn);
      break;
    case SOCK_CLOSED:
			len = gSystemParam.webServerPort[1];
			len *= 256;
			len += gSystemParam.webServerPort[0];
			socket(sn, Sn_MR_TCP, len, 0x00);    /* reinitialize the socket */
      break;
    default:
    break;
  }// end of switch
}

 

6 REPLIES 6

I'd suppose it does start.

Replace rhe function call with a HAL_Delay(100) and see if it "works" again.

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..
unsigned_char_array
Senior III

"the program cannot start"
What "program"? What do you mean by "start"?

A line in the "future" generally shouldn't affect a line before it.

Do you get compilation errors? Do you get errors when flashing? Do you get errors when debugging?
Or does the binary run, but doesn't do what you want it to do? If so, what is the desired/expected behavior vs what is the observed behavior? Does it hang in a loop? Hardfault errors?

Kudo posts if you have the same problem and kudo replies if the solution works.
Click "Accept as Solution" if a reply solved your problem. If no solution was posted please answer with your own.

No, it doesn't work. The segger RTT viewer doesn't has any output.

Under normal circumstances, SEGGER RTT viewer has output and w5500 will connect to the server. However, after commenting out do_http(0), RTT viewer has no output and w5500 will not connect to the server. If you enter debug mode, you will find that the code is executing normally.

What server? I don't have my crystal ball at hand.
If the program doesn't do what you want when commenting out the line, then don't comment it out.

Kudo posts if you have the same problem and kudo replies if the solution works.
Click "Accept as Solution" if a reply solved your problem. If no solution was posted please answer with your own.

@BOEINGNG wrote:

Under normal circumstances, SEGGER RTT viewer has output and w5500 will connect to the server. However, after commenting out do_http(0), RTT viewer has no output and w5500 will not connect to the server..


But it seems that all your RTT output, and all your w5500 stuff is inside do_http(0) - so it obviously won't happen if you don't call that function?

🤔