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

 
 
> Заблудился в трех соснах, не заполняется массив в RAM
tvilsa
сообщение Jul 15 2011, 04:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 27-01-09
Пользователь №: 43 990



Добрый день!
Такая проблема. надо заполнить массив в 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
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
ld81
сообщение Jul 15 2011, 05:00
Сообщение #2





Группа: Новичок
Сообщений: 3
Регистрация: 26-09-06
Пользователь №: 20 696



Попробуй так

Код
#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)
{ }
}
Go to the top of the page
 
+Quote Post
tvilsa
сообщение Jul 15 2011, 05:36
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 27-01-09
Пользователь №: 43 990



Спасибо заработало!
А чем была проблема?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 15 2011, 05:40
Сообщение #4


Гуру
******

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



QUOTE (tvilsa @ Jul 15 2011, 08:36) *
А чем была проблема?
Согласно стандарту языка высокого уровня С, явно не проинициализированные глобальные переменные инициализируются нулем. Это происходит до входа в функцию main(). За время обнуления большого массива собака успевала сработать.


--------------------
На любой вопрос даю любой ответ
"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
tvilsa
сообщение Jul 15 2011, 06:17
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 27-01-09
Пользователь №: 43 990



Понял, спасибо большое!
Go to the top of the page
 
+Quote Post
1921
сообщение Jul 15 2011, 07:21
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 29-09-10
Пользователь №: 59 820



Цитата(Сергей Борщ @ Jul 15 2011, 09:40) *
Согласно стандарту языка высокого уровня С, явно не проинициализированные глобальные переменные инициализируются нулем. Это происходит до входа в функцию main(). За время обнуления большого массива собака успевала сработать.


ВАХхх, какие интересные вещи узнаёшь! Ведь наступал на это тоже, но так и не понял, в чём дело! А если перед объявлением переменной поставить no init - будет работать?
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Jul 15 2011, 08:56
Сообщение #7


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

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



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

Будет. Но отключение собаки в low_level_init все равно правильнее, так как исключает зависимость от количества глобальных объектов, требующих инициализации до main.
Go to the top of the page
 
+Quote Post

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

 


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


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