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

 
 
> Трассировка процесса
juvf
сообщение Dec 10 2010, 11:32
Сообщение #1


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



MSP430F2418
есть в мэйне основной цыкл while(1). в теле цыкла вызываются всякие процедуры и функции которые по глобальным флагам делают те или иные действия. Есть обработчик прерываний который прерывает этот вайл и выставляет всякие флажки, которые обрабатываются в главном цыкле. обычно цыкл прохонит за несколько мс с учётом времени потраченное в перываниях. но иногда процесс где-то шляется больше секунды. в обработчике прерывания выставляю флаг. в главном цыкле должен по этому флагу запустить процедуру. так вот между выставлением флага в прерывании и проыеркой этого флага в гл. цыкле может пройти больше секунды. из прерывания выход мгновенный. 100%. а вот где потом процесс шляется целую секунду не могу найти. узнать бы в каком месте была прервана программа прерыванием и куда вернулась? Как бы трассировкку процесса устроить? Как это можно решить с помошью IAR EW IDE? или какими еще способами можно выяснить где мы были целую секунду?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Dec 11 2010, 07:28
Сообщение #2


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Нашел багу. В мэйне в одном месте застреваю на долго. laughing.gif Всем спасибо!

Цитата
Если вся программа написана так, как этот фрагмент, то лучше переписать ее по-новой, более тщательно продумав алгоритмы.
Ну я бы с нуля конечно писал бы по другому. Но что значит "лучше"? Переписать с нуля - это год минимум + год на тестирование. Мне нужно добавить не большой функционал к отлаженной программе, которая работает без сбоев уже годами в сотнях устройств. Лучше потратить 2 года на написание нового кода, чем неделю на нахождении баги, которую я сделал при добавлении нового функционала? Тем более что прога может общятся с кучей устройств, которых физически в данный момент нет. А с ними обмен тоже придется отлаживать.

ps И всё же, на будущее, есть в msp430 что-то типа трассировки процесса? Или дерево вызова функций? Слышал что есть. Как бы это поднять? Хотелось бы остановится в брейкпоинте и увидеть что находишся в функции f1(), эта функция была вызвана из f2(), f2 была вызвана прерыванием от uart, прерывание прервало выполнение функции f3(), в момент прерывание выполнения f3 локальные переменные в f3 были такие и такие, регистры такие и такие ну и т.п.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Dec 14 2010, 22:19
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(juvf @ Dec 11 2010, 14:28) *
Переписать с нуля - это год минимум + год на тестирование.

ps И всё же, на будущее, есть в msp430 что-то типа трассировки процесса? Или дерево вызова функций?

Что же такого можно писать год? Не преувеличивайте, память должна закончиться быстрее, если действительно писать, а не в потолок смотреть wink.gif

Термин "процесс" здесь режет слух.
А дерево вызова функций видно в отладчике в окошке "Call stack"



--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 14:27
Рейтинг@Mail.ru


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