Перейти к содержанию
    

Заблудился в трех соснах

Добрый день!

Такая проблема. надо заполнить массив в RAM.

Пишу такой код

#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

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

 

меняю размер массива

#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

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуй так

 

#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)
{ }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чем была проблема?
Согласно стандарту языка высокого уровня С, явно не проинициализированные глобальные переменные инициализируются нулем. Это происходит до входа в функцию main(). За время обнуления большого массива собака успевала сработать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Согласно стандарту языка высокого уровня С, явно не проинициализированные глобальные переменные инициализируются нулем. Это происходит до входа в функцию main(). За время обнуления большого массива собака успевала сработать.

 

ВАХхх, какие интересные вещи узнаёшь! Ведь наступал на это тоже, но так и не понял, в чём дело! А если перед объявлением переменной поставить no init - будет работать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ВАХхх, какие интересные вещи узнаёшь! Ведь наступал на это тоже, но так и не понял, в чём дело! А если перед объявлением переменной поставить no init - будет работать?

Будет. Но отключение собаки в low_level_init все равно правильнее, так как исключает зависимость от количества глобальных объектов, требующих инициализации до main.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...