kostya-m 0 1 марта, 2015 Опубликовано 1 марта, 2015 (изменено) · Жалоба Есть такой пример подключения 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 то работает? Изменено 1 марта, 2015 пользователем Мусатов Константин Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 1 марта, 2015 Опубликовано 1 марта, 2015 · Жалоба Попытки найти альтернативный обработчик прерывания в остальном коде примера не дали результата. ETH_IRQHandler находится в stm32f2xx_it.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kostya-m 0 1 марта, 2015 Опубликовано 1 марта, 2015 · Жалоба ETH_IRQHandler находится в stm32f2xx_it.c Но почему он не объявлен как .EXTERN в стартапе и оставлена путая заглушка. Мне кажется, с точки зрения языка, он не должен использовать внешнюю ссылку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 1 марта, 2015 Опубликовано 1 марта, 2015 · Жалоба В стартапе заглушка объявлена как weak, соответственно, будет заменена при линковке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 марта, 2015 Опубликовано 1 марта, 2015 · Жалоба Поскольку приход и отправка данных по Ethernet асинхронное событие, то логично работать через прерывание. Не обязательно. У меня всё сделано по схеме Super Loop. Нормально работает. Не зря же Ethernet MAC умеет накапливать принятые кадры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kostya-m 0 1 марта, 2015 Опубликовано 1 марта, 2015 · Жалоба В стартапе заглушка объявлена как weak, соответственно, будет заменена при линковке. Понял. Ой не люблю такие неявные вещи. Гораздо понятнее прямое определение. Вопрос закрыт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться