Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Заблудился в трех соснах
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
tvilsa
Добрый день!
Такая проблема. надо заполнить массив в RAM.
Пишу такой код
CODE
#include <msp430x26x.h>

unsigned int y;
char a[4000];

void main(void)
{

WDTCTL = WDTPW+WDTHOLD; // Stop WDT
for (y=0;y<4000;y++) a[y]=1;

while(1)
{ }
}


зашиваю в контроллер msp430f2618
все работает. массив заполняется.

меняю размер массива
CODE
#include <msp430x26x.h>

unsigned int y;
char a[7000];

void main(void)
{

WDTCTL = WDTPW+WDTHOLD; // Stop WDT
for (y=0;y<7000;y++) a[y]=1;

while(1)
{ }
}

и все перестает работать.
более того при зашивке даже кнопка GO не активна.

Ошибок при компиляции не выдает. В чем может быть дело?
Компилятор IAR EW430 5.10
Заранее спасибо.
ld81
Попробуй так

Код
#include <msp430x26x.h>

unsigned int y;
char a[7000];

int __low_level_init(void)
{
  WDTCTL = WDTPW + WDTHOLD;               // Stop WDT
  // place your code for hardware initialization here
  /*==================================*/
  /* Choose if segment initialization */
  /* should be done or not.           */
  /* Return: 0 to omit seg_init       */
  /*         1 to run seg_init        */
  /*==================================*/
  return (1);
}
void main(void)
{

for (y=0;y<7000;y++) a[y]=1;

while(1)
{ }
}
tvilsa
Спасибо заработало!
А чем была проблема?
Сергей Борщ
QUOTE (tvilsa @ Jul 15 2011, 08:36) *
А чем была проблема?
Согласно стандарту языка высокого уровня С, явно не проинициализированные глобальные переменные инициализируются нулем. Это происходит до входа в функцию main(). За время обнуления большого массива собака успевала сработать.
tvilsa
Понял, спасибо большое!
1921
Цитата(Сергей Борщ @ Jul 15 2011, 09:40) *
Согласно стандарту языка высокого уровня С, явно не проинициализированные глобальные переменные инициализируются нулем. Это происходит до входа в функцию main(). За время обнуления большого массива собака успевала сработать.


ВАХхх, какие интересные вещи узнаёшь! Ведь наступал на это тоже, но так и не понял, в чём дело! А если перед объявлением переменной поставить no init - будет работать?
jorikdima
Цитата(1921 @ Jul 15 2011, 11:21) *
ВАХхх, какие интересные вещи узнаёшь! Ведь наступал на это тоже, но так и не понял, в чём дело! А если перед объявлением переменной поставить no init - будет работать?

Будет. Но отключение собаки в low_level_init все равно правильнее, так как исключает зависимость от количества глобальных объектов, требующих инициализации до main.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.