Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблемма с watchdog timer в 1611.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
CAHTA_1939
т.к. у меня происходит инициализация большой структуры, то для предотврашения зависания мсп я вставил в код

Код
int __low_level_init(void)
{
   WDTCTL = WDTPW + WDTHOLD;             //Stop watchdog timer to prevent time out reset
   return (1);
}


но вот незадача! на первом контроллере у меня все работает хорошо. но когда эту прошивку пишу во втрой, тоже 1611 , наблюдается чтото типа постоянного резера.

а если в main вставить

Код
WDTCTL = WDTPW + WDTHOLD;


то все работает норм... (это пир том что __low_level_init тоже присутствует )


контроллеры одинаковые, стоит 8Мгц кварц на обоих. хз. странно это както.
помогите кто чем сможет =(
Bom_Shankar
Значит, всё таки, __low_level_init() не исполняется (перед main).

Цитата(CAHTA_1939 @ Nov 6 2007, 17:04) *
т.к. у меня происходит инициализация большой структуры, то для предотврашения зависания мсп я вставил в код

Код
int __low_level_init(void)
{
   WDTCTL = WDTPW + WDTHOLD;             //Stop watchdog timer to prevent time out reset
   return (1);
}


но вот незадача! на первом контроллере у меня все работает хорошо. но когда эту прошивку пишу во втрой, тоже 1611 , наблюдается чтото типа постоянного резера.

а если в main вставить

Код
WDTCTL = WDTPW + WDTHOLD;


то все работает норм... (это пир том что __low_level_init тоже присутствует )
контроллеры одинаковые, стоит 8Мгц кварц на обоих. хз. странно это както.
помогите кто чем сможет =(



Сорри, не заметил , что прошивка единая. Всё таки ресет проходит или нет - попробуйте дёргать ногой пол секунды в low_level (ну или ещё что-нибудь), чтоб понять уходит он в ресет или нет.
CAHTA_1939
полный ппц. и на вротом тоже __low_level_init перестал исполняться...
Bom_Shankar
В таком случае эта функция не компилируется (и не_линкуется), проверьте отладчиком и\или добавьте в эту low_level дёргание ногой в течении секунды. Если она не вызывается перед main - советую попробовать вывнести в отдельный *.c файл (и\или компилить функцию чисто, как Си, без ++)
Сергей Борщ
Цитата(CAHTA_1939 @ Nov 6 2007, 16:43) *
полный ппц. и на вротом тоже __low_level_init перестал исполняться...
ЧуднО читать такие диагнозы. Вы смотрели .map или вывод дизассемблера в симуляторе, чтобы убедиться, что __low_level_init() у вас вообще попал в прошивку? Насколько я помню по другому вашему посту, вы компилируете в режиме С++. Не буду долго объяснять про изменение имен функций в С++ - захотите, найдете в поисковиках по ключевым словам name mangling и C linkage. В общем объявите __low_level_init() как extern "C" int __low_level_init().
Bom_Shankar
Цитата(Сергей Борщ @ Nov 6 2007, 17:59) *
ЧуднО читать такие диагнозы. Вы смотрели .map или вывод дизассемблера в симуляторе, чтобы убедиться, что __low_level_init() у вас вообще попал в прошивку? Насколько я помню по другому вашему посту, вы компилируете в режиме С++. Не буду долго объяснять про изменение имен функций в С++ - захотите, найдете в поисковиках по ключевым словам name mangling и C linkage. В общем объявите __low_level_init() как extern "C" int __low_level_init().


Я согласен, и тоже посоветовал компилить __low_level_init() в Си, ну а в map заглянуть - святое!
CAHTA_1939
Цитата(Сергей Борщ @ Nov 6 2007, 17:59) *
ЧуднО читать такие диагнозы. Вы смотрели .map или вывод дизассемблера в симуляторе, чтобы убедиться, что __low_level_init() у вас вообще попал в прошивку? Насколько я помню по другому вашему посту, вы компилируете в режиме С++. Не буду долго объяснять про изменение имен функций в С++ - захотите, найдете в поисковиках по ключевым словам name mangling и C linkage. В общем объявите __low_level_init() как extern "C" int __low_level_init().



билн. спасибо большое =) сеня ман покурю.
CAHTA_1939
мнда.... вот не задача =)
у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось что пришенесенная прошивка из дома на работе не пошла. всем спасибо.
VAI
Цитата
у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось

А Вы, когда ташите проект домой, тащите всю папку (папки), вместе с файлом проекта. Тогда и все настройки будут одинаковы.
Сергей Борщ
Цитата(CAHTA_1939 @ Nov 6 2007, 19:33) *
у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось что пришенесенная прошивка из дома на работе не пошла.
VAI прав, таскайте весь проект целиком. Но если вдруг вам надо файл компилить и в С и в С++ режиме, то объявите функцию так:
Код
_C_LIB_DECL
int __low_level_init(void)
{
    .........
    return 1;
}
_END_C_LIB_DECL
Тогда в режиме С++ функция будет компилироваться с exterm "C", а в режиме С - без.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.