реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LwIP, FreeRTOS, STM32F207, Фирменный пример и его функционирование
Мусатов Констант...
сообщение Mar 1 2015, 12:18
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Есть такой пример подключения LwIP http://www.st.com/st-web-ui/static/active/...sw-stm32060.zip
Открываю его под IAR. Пример, в принципе, работает. Однако, такое впечатление, что вопреки, а не благодаря. Но возможно, я чего-то недопонимаю.
Поскольку приход и отправка данных по Ethernet асинхронное событие, то логично работать через прерывание. Потому логично увидеть в коде инициализации и включение прерывания:
main.c
Код
...
int main(void)
{
...
  /* configure Ethernet (GPIOs, clocks, MAC, DMA) */
  ETH_BSP_Config();
    
  /* Initilaize the LwIP stack */
  LwIP_Init();
  
  /* Initialize webserver demo */
  http_server_netconn_init();

....
}

Соответственно в stm32f2x7_eth_bsp.c
Код
...
void ETH_BSP_Config(void)
{
  /* Configure the GPIO ports for ethernet pins */
  ETH_GPIO_Config();
  
  /* Config NVIC for Ethernet */
  ETH_NVIC_Config();

  /* Configure the Ethernet MAC/DMA */
  ETH_MACDMA_Config();
....
}
...
void ETH_NVIC_Config(void)
{
  NVIC_InitTypeDef   NVIC_InitStructure;

  /* 2 bit for pre-emption priority, 2 bits for subpriority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* 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);    
}
...

Вроде как разрешили прерывание по эзернету
Однако открываю startup_stm32f2xx.s и вижу, что ETH_IRQHandler обслуживается внутренней заглушкой
Попытки найти альтернативный обработчик прерывания в остальном коде примера не дали результата.

Беру пример FreeRTOS 8.2.0. В нем, к сожалению, нет примера под IAR на STM32 Cortex и LwIP, но есть STM32F107 под GCC. В нем в STM32F10x_Startup.s отчетливо прописано
Код
.extern xPortPendSVHandler
.extern xPortSysTickHandler
.extern vPortSVCHandler
.extern vMAC_ISR;

Т.е. обслуживание прерывания есть. Как же пример от ST то работает?

Сообщение отредактировал Мусатов Константин - Mar 1 2015, 12:20
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 1 2015, 12:46
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Мусатов Константин @ Mar 1 2015, 15:18) *
Попытки найти альтернативный обработчик прерывания в остальном коде примера не дали результата.

ETH_IRQHandler находится в stm32f2xx_it.c
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Mar 1 2015, 13:00
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Цитата(aaarrr @ Mar 1 2015, 15:46) *
ETH_IRQHandler находится в stm32f2xx_it.c

Но почему он не объявлен как .EXTERN в стартапе и оставлена путая заглушка. Мне кажется, с точки зрения языка, он не должен использовать внешнюю ссылку.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 1 2015, 13:02
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



В стартапе заглушка объявлена как weak, соответственно, будет заменена при линковке.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 1 2015, 13:04
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Мусатов Константин @ Mar 1 2015, 15:18) *
Поскольку приход и отправка данных по Ethernet асинхронное событие, то логично работать через прерывание.

Не обязательно. У меня всё сделано по схеме Super Loop. Нормально работает. Не зря же Ethernet MAC умеет накапливать принятые кадры.
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Mar 1 2015, 13:12
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Цитата(aaarrr @ Mar 1 2015, 16:02) *
В стартапе заглушка объявлена как weak, соответственно, будет заменена при линковке.

Понял. Ой не люблю такие неявные вещи. Гораздо понятнее прямое определение. Вопрос закрыт
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 02:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01417 секунд с 7
ELECTRONIX ©2004-2016