|
|
  |
непонятность с IAR, глюки кода |
|
|
|
Sep 1 2013, 17:44
|
Профессионал
    
Группа: Свой
Сообщений: 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"); и почему себя так ведет?
|
|
|
|
|
Sep 1 2013, 19:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079

|
гипотеза полностью подтвердилась Код // char x1, x2, x3, x4, x5, x6, x7, x8; char xx[8]; xx [0]='a'; putString("\r\n"); putchar(xx [0]); putString("\r\n"); код работает только со стеком 0x28, со стеком 0x20 не хочет работать. Спасибо. Вообще, какой размер стека оптимален, чтобы и глюки подобные не ловить и чтобы не слишком глубокий был?
|
|
|
|
|
Sep 1 2013, 20:07
|

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

|
Цитата(Метценгерштейн @ Sep 1 2013, 23:26)  вот у нас в меге8 1 КБайт SRAM. Как мне узнать, сколько оставшаяся память? А сколько он будет расходовать в процессе работы? Вы не поняли мою шутку  . В map-файле читаем завершающие строки. Например, такие: Код CSTACK DATA 00000061 - 000000C0 60 dse 0 RSTACK DATA 000000C1 - 00000140 80 dse 0 .................
3 267 bytes of CODE memory (+ 10 range fill ) 519 bytes of DATA memory (+ 36 absolute ) Отсюда вычисляем сколько осталось свободной DATA-памяти: 1024-(519+36)=469 и отдаем все это стекам. Т.е. добиваемся того, чтобы компилятор в map-файле сообщил, что вся DATA-память занята (=1024 байта). Такое состояние будет означать, что размер стеков максимален, и увеличить их более нельзя.
|
|
|
|
|
Sep 2 2013, 05:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079

|
а DATA- это у нас SRAM и есть, получается? Заметил, что при изменении размера стека, так же в МАР файле меняется размер DATA памяти. Это он весь стек и заполняет? Или он резерв тоже просто учитывает? заодно подскажите пож-ста, Вы же заведуете ИАРом на Сахаре  , в новых версиях не появилась удобная 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
|
|
|
|
|
Sep 2 2013, 07:52
|

Гуру
     
Группа: Модератор 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)  заодно подскажите пож-ста, Вы же заведуете ИАРом на Сахаре  , в новых версиях не появилась удобная IDE типа Eclipse? Я и здесь таким разделом заведую  . Появилась (в версиях с новой системой лицензирования) новая версия РЕДАКТОРА, но IDE внешне остался прежним. С Eclipse не работала, но новый редактор IAR оставил у меня очень хорошее впечатление, тогда как старый я просто терпеть не могла. А новый даже скобочки подсвечивает, показывая, где находится закрывающая. Полный список нововедений не скажу, т.к. пользусь лишь ограниченными возможностями - что-то скопировать с места на место, большего мне не надо. Цитата(Метценгерштейн @ Sep 2 2013, 09:37)  заметил еще одну странность: сделал стек 512 байт. странное поведение... А почему так? Не знаю. Но подозреваю, что слишком много стека тоже плохо  . Честно говоря, распределение памяти по умолчанию в модели small мне не нравится. Не понимаю, зачем стеки вставили в середину между ABSOLUTE и NEAR. В тиньках хорошо было - стеки находились сверху, и тогда можно было просто поставить указатель RSTACKа на (пред)последний байт SRAM и жить себе припеваючи: какой бы ни была программа, стеки всегда имели максимально возможную величину. Тем более что RSTACK растет сверху вниз, а CSTACK (он программный, а не аппаратный) ему настречу - снизу вверх. А потому было неважно, кому из них сколько досталось байт, главное, чтобы в промежутке оставалось место. А сейчас в small-модели приходится отодвигать NEAR вверх, чтобы расширить место под стеки. Я уж подумывала переписать config-файл линкера, подняв CSTACK и RSTACK на самый верх, но как-то стрёмно  .
|
|
|
|
|
Sep 2 2013, 08:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079

|
у меня версия 6.20.1 это какой редактор? Старый или новый уже? вернул стек как был- 0x20, код Код char x1; x1 = 'K'; putString("\r\n"); putchar(x1); putString("\r\n"); и все-равно происходит хрень с задержкой при заливке. Т.е. Букву меняю, сначала старую пишет, потом только через минуты 3 новую ??? А как сюда доступ на ФТП получить? Это у меня TerraTerm глючила. Похоже, выдавала старые записи за новые, а новые копила и только потом их выдавала. А выглядело как все в реальном времени. И такое бывает ))
|
|
|
|
|
Sep 2 2013, 08:41
|

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

|
Цитата(Метценгерштейн @ Sep 2 2013, 12:28)  у меня версия 6.20.1 это какой редактор? Старый или новый уже? Уже новый. Чем-то не нравится? Цитата(Метценгерштейн @ Sep 2 2013, 12:28)  А как сюда доступ на ФТП получить? Заявление надо писать с клятвой  для поступления в "свои" и ждать когда на него придет положительное заключение админа - http://electronix.ru/forum/index.php?showtopic=2605P.S. Письмо к вам в личку отправила, ловите.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|