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

 
 
 
Reply to this topicStart new topic
> проблемма с watchdog timer в 1611., ни чего не могу понять...
CAHTA_1939
сообщение Nov 6 2007, 14:04
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Bom_Shankar
сообщение Nov 6 2007, 14:21
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 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 (ну или ещё что-нибудь), чтоб понять уходит он в ресет или нет.
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Nov 6 2007, 14:43
Сообщение #3


Частый гость
**

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



полный ппц. и на вротом тоже __low_level_init перестал исполняться...
Go to the top of the page
 
+Quote Post
Bom_Shankar
сообщение Nov 6 2007, 14:54
Сообщение #4


Участник
*

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



В таком случае эта функция не компилируется (и не_линкуется), проверьте отладчиком и\или добавьте в эту low_level дёргание ногой в течении секунды. Если она не вызывается перед main - советую попробовать вывнести в отдельный *.c файл (и\или компилить функцию чисто, как Си, без ++)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2007, 14:59
Сообщение #5


Гуру
******

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



Цитата(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().


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Bom_Shankar
сообщение Nov 6 2007, 15:12
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 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 заглянуть - святое!
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Nov 6 2007, 15:29
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 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().



билн. спасибо большое =) сеня ман покурю.
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Nov 6 2007, 17:33
Сообщение #8


Частый гость
**

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



мнда.... вот не задача =)
у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось что пришенесенная прошивка из дома на работе не пошла. всем спасибо.
Go to the top of the page
 
+Quote Post
VAI
сообщение Nov 7 2007, 04:15
Сообщение #9


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



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

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


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 7 2007, 08:46
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 06:02
Рейтинг@Mail.ru


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