Skip to main content
Associate II
June 11, 2024
Solved

LWIP Server FREERTOS

  • June 11, 2024
  • 2 replies
  • 1001 views

HI,

my application is a tcp echoserver which works perfectly but, only for 10-20 minutes, after don't ping anymore.

I'm using STM32H723 with LWIP and RTOS and I think it's a memory configuration issue.

This is my setup:

void MPU_Config(void)

{

MPU_Region_InitTypeDef MPU_InitStruct = {0};

// Disables the MPU

HAL_MPU_Disable();

// Initializes and configures the Region and the memory to be protected

MPU_InitStruct.Enable = MPU_REGION_ENABLE;

MPU_InitStruct.Number = MPU_REGION_NUMBER0;

MPU_InitStruct.BaseAddress = 0x0;

MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;

MPU_InitStruct.SubRegionDisable = 0x87;

MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;

MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;

MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;

MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;

MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;

MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;



HAL_MPU_ConfigRegion(&MPU_InitStruct);



// Initializes and configures the Region and the memory to be protected



MPU_InitStruct.Number = MPU_REGION_NUMBER1;

MPU_InitStruct.BaseAddress = 0x30000000;

MPU_InitStruct.Size = MPU_REGION_SIZE_32KB;

MPU_InitStruct.SubRegionDisable = 0x0;

MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;

MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;

MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;

MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;

MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;

MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;



HAL_MPU_ConfigRegion(&MPU_InitStruct);



// Initializes and configures the Region and the memory to be protected



MPU_InitStruct.Number = MPU_REGION_NUMBER2;

MPU_InitStruct.Size = MPU_REGION_SIZE_512B;

MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;

MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;

MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;

MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;

MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;

MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;



HAL_MPU_ConfigRegion(&MPU_InitStruct);

// Enables the MPU

HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);

}

Can anyone heelp me?

I can accept the reset.

Is it possible to verify the absence of the connection to restart the system?

b.r.

Best answer by STea

Hello @Stefano1 ,

your problem seems to be retated to issue Ethernet transmit is hang on osSemaphoreAcquire( TxPktSemaphore ) inside low_level_output() · Issue #224 · STMicroelectronics/STM32CubeH7 (github.com).

please check this out.
Regards

2 replies

mƎALLEm
Technical Moderator
June 11, 2024

Hello,

Please in next time use <\> button to insert your code for better visibility.

Thank you for your understanding.

To give better visibility on the answered topics, please click "Best answer" on the reply which solved your issue or answered your question.
STeaBest answer
ST Employee
June 20, 2024
In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.