Hi,

Yes you have a problem...


Cortex-M3 has a priority level mechanism a bit different from other micro's.

In FreeRTOS its a bit not clear...


Your FreeRTOS time tick is interrupt driven and has a priority.

Also all your devices interrupts have priorities.


In FreeRTOS you have function calls that are used in your application code and 
similar function

that can be called from interrupt (prefix FromISR...)


In order to have a stable code running with FreeRTOS you must set all 
interrupts that may need to

be stopped by the OS to have a lower interrupt priority.


Cortex interrupt priority

15 lowest

.

.

.

0  highest


If you set your OS time tick interrupt priority to 5 your UART, TCP etc must be 
set to 5 + something.

If you do not set it like that you will get strange behavior.


I suggest downloading an ST example and see how they set it properly.


Good luck,

Noam.

________________________________
From: lwip-users <[email protected]> on behalf of 
Erkan Ersoy <[email protected]>
Sent: Saturday, August 20, 2016 12:54 PM
To: Mailing List for LwIP Users
Subject: [lwip-users] stm32 ethernet interrup priority

Hello;

I am trying to implement usart interrupt to my project

So iread freertos stm32 interrupt warnings and set i lilk that

/* Enable the Ethernet global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

//USART 5 interrupt
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = UART5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 
configMAX_SYSCALL_INTERRUPT_PRIORITY;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_InitStruct);

But I begin to have system freezes so i changed it like that

/* Enable the Ethernet global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 
configMAX_SYSCALL_INTERRUPT_PRIORITY;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

//USART 5 interrupt
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = UART5_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 
configMAX_SYSCALL_INTERRUPT_PRIORITY;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_InitStruct);

Now I don't have a problem. The diffference is ethernet interrupts. I didnt 
have a problem until i added the usart interrupt. And I look at ST's freertos 
examples they set it to 2.

is there something wrong with my current code that will cause problem in the 
future?
(I will move UART5 task to USART1 after I finish writing functionality)

Thank you
_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to