Сконфигурировал ядро (то, которое с авалон-мм) для работы с одним дескриптором на передачу и одним на прием. Ставлю брейкпоинт на обработку прерывания по приему. Посылаю пинг с компа. Срабатывает брейк, жду. Проходят 4 пинга, при этом программа висит на брейке. Дальше нажимаю run - и тут же выскакивает (после обработки первого пинга) брейк от второго (затем от 3-го и 4-го), а пинги то уже прошли!
Вопросы такие, поясните кто с этим дело имел:
1. Один дескриптор обрабатывает 1 фрейм эзернета или несколько? 2. Почему срабатывают прерывания по приему, когда пинги уже прошли? И именно столько раз, сколько было пингов? 3. Если дескриптор обрабатывает 1 фрейм - непонятно, где копятся остальные пинги пока программа висит в брейке? 4. Если дескриптор обрабатывает скольугодно фреймов (пишет все что приходит с эзернета подряд) - как ограничить железяке место, куда она может писать? Ато ведь кончится отведенное ей место - залезет на область данных или программы и будет ситуация ж..па.
PS даже если 4. верно, непонятно почему срабатывают прерывания после того как пинги прошли.
Буду рад любым пояснениям.
|