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

 
 
> обработка прерывания в IAR, как-то странно ведет себя
Метценгерштейн
сообщение Aug 27 2014, 22:30
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



зашел в прерывание, от туда вызвал ф-ю
Код
Recv_Data_From_Interrupt ();

http://c2n.me/iOhRcY
жму F1, попадаю в нее
http://c2n.me/iOhRy1
из нее вызывается еще одна ф-я.
жму F11
http://c2n.me/iOhRVJ
и попадаю не в ту очередную ф-ю, на на скобку.

Разве нельзя из прерывания вызывать функции матрешкой? Или это глюк?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
WitFed
сообщение Aug 28 2014, 07:41
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 271
Регистрация: 6-12-11
Из: Taganrog
Пользователь №: 68 701



Нет, хороший отладчик в режиме Debug (ключ компилятора "-o0") должен показывать всё, что угодно, заходить, куда угодно, а также изменять место исполнения на указанную строку и т.д.
Может Release (типа "-o3") у вас, да все WIZ_* объявлены недостаточно убедительно ?
Можно получить map-файл и увидеть там отдельный адрес функции redirect_data() ?
А также дизассемблерное представление программы, и там 20 команд для неё же присутствуют ?
Даже если заинлайнится функция, отладчик в тексте всё равно ходит по ней, эмулируя юзерскую логику.
Правда, DS-5 у меня сейчас чудит периодически для ARM, но стабильно...
Можно в текущем сеансе переключиться в дизассемблер ? Там пошаговые инструкции исполняются, всё должно быть на ладони.
По-любому, перед вызовом redirect_data() можно в её теле поставить точку останова -- оно ж большое, и если нигде это не удастся, то железно функция опущена оптимизацией, иначе на эту ТО по F11 должно перейти.
Матрёшечность может быть любая -- это личное дело каждого, типа толерантности, ну чуть дольше будет отрабатываться прерывание, мож кому-то от этого хорошо... wink.gif Конечно, если 20 уровней вложенности -- такое лучше гасить, вон у MS в драйверах столько мусора наверчено высоко-архитектурного... Не более 1500 обработок за секунду, один из тормозных источников Винд wink.gif
Главное -- не вызывать в прерывании специально оговоренные функции, типа ожидания семафора, которые могут занять неопределённый период и вообще завести систему в клинч.
Не знаю, относится ли к ним sendto() -- вдруг там внутри семафор для разграничения доступа к общему ресурсу ?
Это надо глядеть документацию на используемую ОС.
А если Baremetal, кучи нитей и мудрёной синхронизации нет, то можно вообще всё.
В переполнение стека не верится -- обе функции детские, переменных локальных кот наплакал, если только внешний поток управления, прерванный прерыванием, очень мощный... Но это нужно глядеть на регистр стека в окне регистров, бывает такое в IDE ? И сравнивать с допустимым диапазоном.
Go to the top of the page
 
+Quote Post



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

 


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


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