Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: не доходит до процедуры main зависает на memzero
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Skif
Такая проблема запускаю Debuger прошивается а затем не доходя до main() зависает _data16_memzero(). Подскажите в чем дело? Как решить проблему?
msalov
Цитата(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
Skif
Цитата(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 я что-то не нашел. где можно это найти?
msalov
Цитата(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
VAI
Сделайте так.
Код
/* --- __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" в своём акробат-ридере.
jorikdima
Почему у меня при добавлении в модуль main.c реализации функции __low_level_init она не вызывается из cstartup.s43 ? Надо ребилдить какую-то библиотеку?
Сергей Борщ
Цитата(jorikdima @ Mar 18 2009, 22:41) *
Почему у меня при добавлении в модуль main.c реализации функции __low_level_init она не вызывается из cstartup.s43 ?
Если у вас включен режим компиляции C++, то функции, вызываемые из других языков (асм, С) надо объявлять с extern "C". Других причин не припоминается.
jorikdima
Цитата(Сергей Борщ @ Mar 19 2009, 22:09) *
Если у вас включен режим компиляции C++, то функции, вызываемые из других языков (асм, С) надо объявлять с extern "C". Других причин не припоминается.

Спасибо! Верно!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.