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

 
 
> непонятность с IAR, глюки кода
Метценгерштейн
сообщение Sep 1 2013, 17:44
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



внутри локальной ф-ии объявляю символ и передаю его на печать в консольку- в этом варианте работает
Код
    char x1, x2, x3, x4, x5, x6, x7, x8;
    //  char xx[8];
      x1='y';
      putString("\r\n");
      putchar(x1);
      putString("\r\n");


так уже не работает
Код
// char x1, x2, x3, x4, x5, x6, x7, x8;
      char xx[8];
      xx [0]='h';
      putString("\r\n");
      putchar(xx [0]);
      putString("\r\n");


а добавив static, работает
Код
// char x1, x2, x3, x4, x5, x6, x7, x8;
      static char xx[8];
      xx [0]='h';
      putString("\r\n");
      putchar(xx [0]);
      putString("\r\n");


и почему себя так ведет?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Sep 2 2013, 05:37
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



а DATA- это у нас SRAM и есть, получается?
Заметил, что при изменении размера стека, так же в МАР файле меняется размер DATA памяти. Это он весь стек и заполняет? Или он резерв тоже просто учитывает?
заодно подскажите пож-ста, Вы же заведуете ИАРом на Сахаре wink.gif , в новых версиях не появилась удобная IDE типа Eclipse?

заметил еще одну странность:
сделал стек 512 байт.

странное поведение- лью код
Код
      putString("\r\n");
      char xx[8];
      xx [0]='J';
      putString("\r\n");
      putchar(xx [0]);
      putString("\r\n");

компилю, заливаю.

пишутся буквы J на каждой строке.
теперь заливаю код
Код
putString("\r\n");
      char xx[8];
      xx [0]='D';
      putString("\r\n");
      putchar(xx [0]);
      putString("\r\n");

должен получить на каждой строке букву D, но!
вместо этого продолжает писать J, и только спустя минуты 3, пишет новую D.

если опять поменяю букву, то такая же картина- будет минуты 3 продолжать писать старую букву, а минуты через 3 напишет новую только.
А почему так?

Сообщение отредактировал Метценгерштейн - Sep 2 2013, 06:53
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 2 2013, 07:52
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Метценгерштейн @ Sep 2 2013, 09:37) *
а DATA- это у нас SRAM и есть, получается?
Заметил, что при изменении размера стека, так же в МАР файле меняется размер DATA памяти. Это он весь стек и заполняет? Или он резерв тоже просто учитывает?

Ага. CODE - это flash, а DATA - это SRAM.
Посчитывая размер DATA, компилятор учитывает все статьи расхода, включая стеки.
Резерв не подсчитывается, но легко определяется вручную по разнице между всем объемом SRAM, имеющейся у данного МК, и тем расходом, который пошел на DATA.

Цитата(Метценгерштейн @ Sep 2 2013, 09:37) *
заодно подскажите пож-ста, Вы же заведуете ИАРом на Сахаре wink.gif , в новых версиях не появилась удобная IDE типа Eclipse?

Я и здесь таким разделом заведую sm.gif. Появилась (в версиях с новой системой лицензирования) новая версия РЕДАКТОРА, но IDE внешне остался прежним. С Eclipse не работала, но новый редактор IAR оставил у меня очень хорошее впечатление, тогда как старый я просто терпеть не могла. А новый даже скобочки подсвечивает, показывая, где находится закрывающая. Полный список нововедений не скажу, т.к. пользусь лишь ограниченными возможностями - что-то скопировать с места на место, большего мне не надо.

Цитата(Метценгерштейн @ Sep 2 2013, 09:37) *
заметил еще одну странность:
сделал стек 512 байт.
странное поведение...
А почему так?

Не знаю. Но подозреваю, что слишком много стека тоже плохо sm.gif.
Честно говоря, распределение памяти по умолчанию в модели small мне не нравится. Не понимаю, зачем стеки вставили в середину между ABSOLUTE и NEAR. В тиньках хорошо было - стеки находились сверху, и тогда можно было просто поставить указатель RSTACKа на (пред)последний байт SRAM и жить себе припеваючи: какой бы ни была программа, стеки всегда имели максимально возможную величину. Тем более что RSTACK растет сверху вниз, а CSTACK (он программный, а не аппаратный) ему настречу - снизу вверх. А потому было неважно, кому из них сколько досталось байт, главное, чтобы в промежутке оставалось место. А сейчас в small-модели приходится отодвигать NEAR вверх, чтобы расширить место под стеки.
Я уж подумывала переписать config-файл линкера, подняв CSTACK и RSTACK на самый верх, но как-то стрёмно sm.gif.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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