Перейти к содержанию
    

проблемма с watchdog timer в 1611.

т.к. у меня происходит инициализация большой структуры, то для предотврашения зависания мсп я вставил в код

 

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Мгц кварц на обоих. хз. странно это както.

помогите кто чем сможет =(

Изменено пользователем CAHTA_1939

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит, всё таки, __low_level_init() не исполняется (перед main).

 

т.к. у меня происходит инициализация большой структуры, то для предотврашения зависания мсп я вставил в код

 

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 (ну или ещё что-нибудь), чтоб понять уходит он в ресет или нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В таком случае эта функция не компилируется (и не_линкуется), проверьте отладчиком и\или добавьте в эту low_level дёргание ногой в течении секунды. Если она не вызывается перед main - советую попробовать вывнести в отдельный *.c файл (и\или компилить функцию чисто, как Си, без ++)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Я согласен, и тоже посоветовал компилить __low_level_init() в Си, ну а в map заглянуть - святое!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

билн. спасибо большое =) сеня ман покурю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мнда.... вот не задача =)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось

А Вы, когда ташите проект домой, тащите всю папку (папки), вместе с файлом проекта. Тогда и все настройки будут одинаковы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось что пришенесенная прошивка из дома на работе не пошла.
VAI прав, таскайте весь проект целиком. Но если вдруг вам надо файл компилить и в С и в С++ режиме, то объявите функцию так:
_C_LIB_DECL
int __low_level_init(void)
{
    .........
    return 1;
}
_END_C_LIB_DECL

Тогда в режиме С++ функция будет компилироваться с exterm "C", а в режиме С - без.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...