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

 
 
 
Reply to this topicStart new topic
> Вылет по адресу 4
SasaVitebsk
сообщение Jan 14 2014, 12:36
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Доброго времени суток.
Начал работать с MSP430 впервые. Похоже что-то недогоняю. Возможно много. Сильно не пинайте. На реализацию проекта - месяц.
Проект не сложный. Написал пока с большего.
MSP430f6736. Кварц 32768. Пробовал запустить на 25 и на 12 МГц.
Использую IAR + FreeRTOS. Похоже с FreeRTOS сильно погорячился. Но переписывать уже не хочется.
У меня на ARM эта же FreeRTOS работает как часы. Поэтому как-то не глядя.
А здесь похоже мало кто работает на ней. Возможно в этом и проблема. Пока грешу на систему.
---
Суть проблемы.
1. Запускается нормально и чётко доходит по- крайней мере до запуска задачи. При этом претензий никаких нет. Всё адекватно.
2. Если дальше ходить по шагам (MSP-FET), то работает. Что-то выполняет. Если делать остановки, то работает некоторое время.
3. Если запустить на выполнение то происходит вылет.
Когда останавливаешь процессор, то он находится по адресу 4
Вижу что это какая-то заглушка

bis.w #f0,SR
jmp $

В документации и исходниках её не нашёл. Поскольку это адреса периферии, то предчувствую что это заглушка самого TI.
Вопрос. Что это за ловушка и почему я туда попадаю?
Заранее благодарю за ответ.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 14 2014, 16:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Ничего не знаю про FreeRTOS, но как там у вас обстоят дела с остановом WDT при начальной инициализации? WDT нужно останавливать в функции __low_level_init(), иначе до запуска OS может вообще не дойти.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 14 2014, 18:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Скорее всего происходит прерывание, для которого не задана ISR - в таблице прерываний будет 0xFFFF, что приведет к переходу на 0xFFFE и далее оно, перекрутившись через 0, застрянет на этом 4-ом адресе.

А вот какое прерывание возникает - понаставьте заглушек по всем векторам, да определите.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 15 2014, 05:47
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Спасибо за ответы. Буду пробовать. WDT остановлен. Примеры смотрел.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 15 2014, 10:25
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(SM @ Jan 14 2014, 22:31) *
Скорее всего происходит прерывание, для которого не задана ISR

Всё правильно. Ещё раз спасибо.
Ну и, как обычно, сам дурак. ))
Для ОС используется таймер типа SysTick. На MSP (равно как и на AVR, к примеру), для этих целей используется обычный штатный таймер, так как другого нет.
Для инициализации таймера используется vApplicationSetupTimerInterrupt, а для обработки используется определение вектора в файле FreeRTOSConfig, типа:
#define configTICK_VECTOR TIMER3_A0_VECTOR

Наверное кто-то меня отвлёк и я умудрился инициализировать таймер 3, а обработчик systick сделать на таймер 2. ))
Сейчас поставил заглушки на все прерывания, от греха подальше. )))

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 6th August 2025 - 09:15
Рейтинг@Mail.ru


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