mantech 53 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба 1 час назад, GeorgK сказал: Может, при сборке загнать все изменяемые переменные стека в отдельный сегмент, и целиком обнулять его при необходимости? Неа, не получится. Вообщем - идея изначально "гнилая" - сэмулировал несколько нештатных ситуаций, реально надежного выхода из них нет, разве, что только "оформлять" весь этот стек ввиде вытесняющей задачи и потом, при сваливании в аборт - задачу полностью глушить, обнулять все стеки переменных и запускать заново, иначе с вероятностью 50% уходит в hardfault или еще куда, вообщем виснет намертво. Отсюда вопрос, в чем принципиальное отличие uIP от LwIP? Сразу скажу, DNS,DHCP, SNMP не используются, Нужна работа с TCP пакетами, и верхний уровень - HTTP, FTP, Telnet, modbus-tcp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба 3 минуты назад, mantech сказал: что только "оформлять" весь этот стек ввиде вытесняющей задачи и потом, при сваливании в аборт - задачу полностью глушить, обнулять все стеки переменных и запускать заново, иначе с вероятностью 50% уходит в hardfault или еще куда, вообщем виснет намертво. Ну вот. Я сразу ведь писал. Только так и делать, да плюс - стартап полноценный и инит периферии в начальное состояние. Т.е. - что я писал в первом предложении. 3 минуты назад, mantech сказал: Сразу скажу, DNS,DHCP, SNMP не используются, Нужна работа с TCP пакетами, и верхний уровень - HTTP, FTP, Telnet, modbus-tcp Имхо - такое и самый "убогий" стек потянет. Хотя думаю что и для него для перезапуска нужен реинит периферии и нормальный стартап. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба 23 minutes ago, mantech said: Неа, не получится. Не может не получиться. Если восстановлены RW и ZI-данные, то перезапуск ничем не отличается от обычного старта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба 1 минуту назад, aaarrr сказал: Не может не получиться. Если восстановлены RW и ZI-данные, то перезапуск ничем не отличается от обычного старта. Обычный старт выполняется на reset-state значениях в регистрах периферии. И в регистрах внешнего чипа Phy ethernet. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба 1 minute ago, jcxz said: Обычный старт выполняется на reset-state значениях в регистрах периферии. И в регистрах внешнего чипа Phy ethernet. Речь о стеке LwIP, периферийные драйверы к нему уж никак не относятся. Но разве что-то мешает сбросить MAC и PHY, и перезагрузить драйверы аналогичным образом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба там еще обрабатываемые пакеты могут в общей куче (heap) находиться. Как-то их оттуда вычленить и освободить память будет очень непросто. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 13 сентября, 2019 Опубликовано 13 сентября, 2019 · Жалоба 15 minutes ago, Сергей Борщ said: там еще обрабатываемые пакеты могут в общей куче (heap) находиться. Как-то их оттуда вычленить и освободить память будет очень непросто. Тут или не ипользовать общую кучу в lwIP (по умолчанию так, если не ошибаюсь), или добавить обертку над системными malloc/free для стека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgK 1 14 сентября, 2019 Опубликовано 14 сентября, 2019 · Жалоба У lwIP есть свой менеджер памяти (это настраивается в заголовочном файле), ему просто выделяется область памяти, которой он будет распоряжаться. Так что в этой части вопросов возникнуть не должно. А если есть многозадачность, почему бы тогда не прибивать эту задачу и пускать заново? А что касается низкого уровня, ему нужны только функции "принять пакет" и "послать пакет", так что их можно и не трогать - ну придёт из очереди старый пакет и будет проигнорирован. А uIP многозадачность вообще не нужна, но возможно именно поэтому мне не удалось подружить его с телнетом - консоль выполнения команд всё-таки логично делать как отдельный поток. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться