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

 
 
 
Reply to this topicStart new topic
> не доходит до процедуры main зависает на memzero
Skif
сообщение Jan 31 2008, 08:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 19-02-05
Пользователь №: 2 752



Такая проблема запускаю Debuger прошивается а затем не доходя до main() зависает _data16_memzero(). Подскажите в чем дело? Как решить проблему?
Go to the top of the page
 
+Quote Post
msalov
сообщение Jan 31 2008, 08:28
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Skif @ Jan 31 2008, 10:08) *
Такая проблема запускаю Debuger прошивается а затем не доходя до main() зависает _data16_memzero(). Подскажите в чем дело? Как решить проблему?

Возможно у вас обьявлен большой массив или очень много переменных. Так как WDT включён после RESET, микроконтроллер не успевает инициализировать все переменные до того, как управление перейдет в main где вы выключите/сбросите WDT.
Если у вас больщой массив и не требуется его инициализация можно обьявить его как __no_init в случае если вы используете IAR. А в общем случае можно обьявить функцию, исполняемую до инициализации сегментов и в ней отключить WDT
Код
int __low_level_init(void)
{
  /* Insert your low-level initializations here */


  /*==================================*/
  /* Choose if segment initialization */
  /* should be done or not.        */
  /* Return: 0 to omit seg_init    */
  /*           1 to run seg_init    */
  /*==================================*/
  return (1);
}


Подробней в EW430 Compiler Reference -> Customizing system initialization -> __LOW_LEVEL_INIT

Сообщение отредактировал gotty - Jan 31 2008, 08:28
Go to the top of the page
 
+Quote Post
Skif
сообщение Jan 31 2008, 08:45
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 19-02-05
Пользователь №: 2 752



Цитата(gotty @ Jan 31 2008, 11:28) *
Подробней в EW430 Compiler Reference -> Customizing system initialization -> __LOW_LEVEL_INIT


Спасибо помогло поставил перед некоторыми своими массивами __no_init а где посмотреть поподробнее по этой теме EW430 Compiler Reference -> Customizing system initialization -> __LOW_LEVEL_INIT я что-то не нашел. где можно это найти?
Причина редактирования: Излишнее цитирование.
Go to the top of the page
 
+Quote Post
msalov
сообщение Jan 31 2008, 09:05
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(Skif @ Jan 31 2008, 10:45) *
Спасибо помогло поставил перед некоторыми своими массивами __no_init а где посмотреть поподробнее по этой теме EW430 Compiler Reference -> Customizing system initialization -> __LOW_LEVEL_INIT я что-то не нашел. где можно это найти?

У меня тут:
C:\Program Files\IAR Systems\Embedded Workbench Evaluation 4.0\430\doc\EW430_CompilerReference.pdf
А ещё тут
Либо в Menu -> Help -> MSP430 C/C++ Compiler Reference Guide
Go to the top of the page
 
+Quote Post
VAI
сообщение Jan 31 2008, 10:08
Сообщение #5


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

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



Сделайте так.
Код
/* --- __low_level_init() --------------------------------------------------------------------------------- **
*  Вызывается раньше всех, в ней загасим WDT
* -------------------------------------------------------------------------------------------------------- */
int __low_level_init( void )
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT


  /*==================================*/
  /* Choose if segment initialization */
  /* should be done or not.           */
  /* Return: 0 to omit seg_init       */
  /*        1 to run seg_init         */
  /*==================================*/
  return ( 1 );
}

Цитата
я что-то не нашел. где можно это найти?

Дайте поиск по файлу "EW430_CompilerReference.pdf" фразы "__low_level_init" в своём акробат-ридере.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Mar 18 2009, 20:41
Сообщение #6


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Почему у меня при добавлении в модуль main.c реализации функции __low_level_init она не вызывается из cstartup.s43 ? Надо ребилдить какую-то библиотеку?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 19 2009, 19:09
Сообщение #7


Гуру
******

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



Цитата(jorikdima @ Mar 18 2009, 22:41) *
Почему у меня при добавлении в модуль main.c реализации функции __low_level_init она не вызывается из cstartup.s43 ?
Если у вас включен режим компиляции C++, то функции, вызываемые из других языков (асм, С) надо объявлять с extern "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
jorikdima
сообщение Mar 19 2009, 20:26
Сообщение #8


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(Сергей Борщ @ Mar 19 2009, 22:09) *
Если у вас включен режим компиляции C++, то функции, вызываемые из других языков (асм, С) надо объявлять с extern "C". Других причин не припоминается.

Спасибо! Верно!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:19
Рейтинг@Mail.ru


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