tvilsa 0 15 июля, 2011 Опубликовано 15 июля, 2011 · Жалоба Добрый день! Такая проблема. надо заполнить массив в 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 Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ld81 0 15 июля, 2011 Опубликовано 15 июля, 2011 · Жалоба Попробуй так #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 0 15 июля, 2011 Опубликовано 15 июля, 2011 · Жалоба Спасибо заработало! А чем была проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 15 июля, 2011 Опубликовано 15 июля, 2011 · Жалоба А чем была проблема?Согласно стандарту языка высокого уровня С, явно не проинициализированные глобальные переменные инициализируются нулем. Это происходит до входа в функцию main(). За время обнуления большого массива собака успевала сработать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tvilsa 0 15 июля, 2011 Опубликовано 15 июля, 2011 · Жалоба Понял, спасибо большое! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1921 0 15 июля, 2011 Опубликовано 15 июля, 2011 · Жалоба Согласно стандарту языка высокого уровня С, явно не проинициализированные глобальные переменные инициализируются нулем. Это происходит до входа в функцию main(). За время обнуления большого массива собака успевала сработать. ВАХхх, какие интересные вещи узнаёшь! Ведь наступал на это тоже, но так и не понял, в чём дело! А если перед объявлением переменной поставить no init - будет работать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jorikdima 0 15 июля, 2011 Опубликовано 15 июля, 2011 · Жалоба ВАХхх, какие интересные вещи узнаёшь! Ведь наступал на это тоже, но так и не понял, в чём дело! А если перед объявлением переменной поставить no init - будет работать? Будет. Но отключение собаки в low_level_init все равно правильнее, так как исключает зависимость от количества глобальных объектов, требующих инициализации до main. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться