|
|
  |
проблемма с watchdog timer в 1611., ни чего не могу понять... |
|
|
|
Nov 6 2007, 14:04
|

Частый гость
 
Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713

|
т.к. у меня происходит инициализация большой структуры, то для предотврашения зависания мсп я вставил в код Код 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 - Nov 6 2007, 14:05
|
|
|
|
|
Nov 6 2007, 14:21
|
Участник

Группа: Новичок
Сообщений: 20
Регистрация: 15-12-06
Пользователь №: 23 554

|
Значит, всё таки, __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 (ну или ещё что-нибудь), чтоб понять уходит он в ресет или нет.
|
|
|
|
|
Nov 6 2007, 14:54
|
Участник

Группа: Новичок
Сообщений: 20
Регистрация: 15-12-06
Пользователь №: 23 554

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

Группа: Новичок
Сообщений: 20
Регистрация: 15-12-06
Пользователь №: 23 554

|
Цитата(Сергей Борщ @ 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 заглянуть - святое!
|
|
|
|
|
Nov 6 2007, 15:29
|

Частый гость
 
Группа: Участник
Сообщений: 142
Регистрация: 11-08-07
Пользователь №: 29 713

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

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(CAHTA_1939 @ Nov 6 2007, 19:33)  у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось что пришенесенная прошивка из дома на работе не пошла. VAI прав, таскайте весь проект целиком. Но если вдруг вам надо файл компилить и в С и в С++ режиме, то объявите функцию так: Код _C_LIB_DECL int __low_level_init(void) { ......... return 1; } _END_C_LIB_DECL Тогда в режиме С++ функция будет компилироваться с exterm "C", а в режиме С - без.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|