CAHTA_1939 0 6 ноября, 2007 Опубликовано 6 ноября, 2007 (изменено) · Жалоба т.к. у меня происходит инициализация большой структуры, то для предотврашения зависания мсп я вставил в код 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Мгц кварц на обоих. хз. странно это както. помогите кто чем сможет =( Изменено 6 ноября, 2007 пользователем CAHTA_1939 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bom_Shankar 0 6 ноября, 2007 Опубликовано 6 ноября, 2007 · Жалоба Значит, всё таки, __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 (ну или ещё что-нибудь), чтоб понять уходит он в ресет или нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CAHTA_1939 0 6 ноября, 2007 Опубликовано 6 ноября, 2007 · Жалоба полный ппц. и на вротом тоже __low_level_init перестал исполняться... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bom_Shankar 0 6 ноября, 2007 Опубликовано 6 ноября, 2007 · Жалоба В таком случае эта функция не компилируется (и не_линкуется), проверьте отладчиком и\или добавьте в эту low_level дёргание ногой в течении секунды. Если она не вызывается перед main - советую попробовать вывнести в отдельный *.c файл (и\или компилить функцию чисто, как Си, без ++) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 6 ноября, 2007 Опубликовано 6 ноября, 2007 · Жалоба полный ппц. и на вротом тоже __low_level_init перестал исполняться...ЧуднО читать такие диагнозы. Вы смотрели .map или вывод дизассемблера в симуляторе, чтобы убедиться, что __low_level_init() у вас вообще попал в прошивку? Насколько я помню по другому вашему посту, вы компилируете в режиме С++. Не буду долго объяснять про изменение имен функций в С++ - захотите, найдете в поисковиках по ключевым словам name mangling и C linkage. В общем объявите __low_level_init() как extern "C" int __low_level_init(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bom_Shankar 0 6 ноября, 2007 Опубликовано 6 ноября, 2007 · Жалоба ЧуднО читать такие диагнозы. Вы смотрели .map или вывод дизассемблера в симуляторе, чтобы убедиться, что __low_level_init() у вас вообще попал в прошивку? Насколько я помню по другому вашему посту, вы компилируете в режиме С++. Не буду долго объяснять про изменение имен функций в С++ - захотите, найдете в поисковиках по ключевым словам name mangling и C linkage. В общем объявите __low_level_init() как extern "C" int __low_level_init(). Я согласен, и тоже посоветовал компилить __low_level_init() в Си, ну а в map заглянуть - святое! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CAHTA_1939 0 6 ноября, 2007 Опубликовано 6 ноября, 2007 · Жалоба ЧуднО читать такие диагнозы. Вы смотрели .map или вывод дизассемблера в симуляторе, чтобы убедиться, что __low_level_init() у вас вообще попал в прошивку? Насколько я помню по другому вашему посту, вы компилируете в режиме С++. Не буду долго объяснять про изменение имен функций в С++ - захотите, найдете в поисковиках по ключевым словам name mangling и C linkage. В общем объявите __low_level_init() как extern "C" int __low_level_init(). билн. спасибо большое =) сеня ман покурю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CAHTA_1939 0 6 ноября, 2007 Опубликовано 6 ноября, 2007 · Жалоба мнда.... вот не задача =) у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось что пришенесенная прошивка из дома на работе не пошла. всем спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAI 0 7 ноября, 2007 Опубликовано 7 ноября, 2007 · Жалоба у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось А Вы, когда ташите проект домой, тащите всю папку (папки), вместе с файлом проекта. Тогда и все настройки будут одинаковы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 7 ноября, 2007 Опубликовано 7 ноября, 2007 · Жалоба у меня дома компилятор настрон на стандарт С, а на работе на С++ , вот и получилось что пришенесенная прошивка из дома на работе не пошла. VAI прав, таскайте весь проект целиком. Но если вдруг вам надо файл компилить и в С и в С++ режиме, то объявите функцию так:_C_LIB_DECL int __low_level_init(void) { ......... return 1; } _END_C_LIB_DECL Тогда в режиме С++ функция будет компилироваться с exterm "C", а в режиме С - без. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться