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

 
 
 
Reply to this topicStart new topic
> Опять нехватает памяти под массив)
Xenom0rph
сообщение Oct 12 2008, 09:22
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646



Cуть в чем, значит я декодировал данные, и мне нужно их записать в строку, всего то 30 символов.
Хочу сделать массив на 30 символов, типа char.
вот строка
char mas[30].
А дальше записываю декодированный символ по номеру массива.
На что Code Vision говорит, мол:
The estimated Data Stack usage of 45 bytes()s ...
ну и вот в моей тиньке этот Data Stack всего 32 байта. Так установил Code Vision в настройках.
Есть ещё какая то Hardware Stack 96 bytes.
Как я понял из даташита это и есть 128 внутренней памяти.
Так вот как мне обратится к этим 96 байтам?
Пробовал
flash char mas[30] та же картина, только в профиль.
Раскажите plz как это все работаети и как можно выйти из данного положения. Была идея записи в eeprom, но как там с скоростью записи байта, читал что медленная она очень?

Все разобрался, просто объявил как глобальную переменную ))
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 12 2008, 09:26
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



а если порпобовать static char mas[]?
тогда на стек он попасть не должен


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Xenom0rph
сообщение Oct 12 2008, 09:31
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 2-10-08
Пользователь №: 40 646



Цитата(MrYuran @ Oct 12 2008, 13:26) *
а если порпобовать static char mas[]?
тогда на стек он попасть не должен

Попробую, ради эксперемента, а так и глобально если объявить, тоже отлично работает!

да! тоже работает, спасибо незнал раньше об этом!

Сообщение отредактировал Xenom0rph - Oct 12 2008, 09:35
Go to the top of the page
 
+Quote Post
garbuz
сообщение Oct 12 2008, 17:08
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 12-10-08
Пользователь №: 40 892



Цитата(Xenom0rph @ Oct 12 2008, 12:22) *
Так установил Code Vision в настройках.

Дак измените в свойствах проекта.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Oct 12 2008, 18:18
Сообщение #5


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

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



А при чем здесь Code Vision? Стандарт С определяет, что локальные переменные размещаются в стеке, а описанные как static или глобальные - в сегменте данных. Если массив в данной задаче нужен только на время вызова функции, то лучше озаботится выяснением, сколько выделено места под стек и, по возможности, увеличить его.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 12 2008, 18:35
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergeeff @ Oct 12 2008, 22:18) *
Стандарт С определяет, что локальные переменные размещаются в стеке, а описанные как static или глобальные - в сегменте данных.

В стандарте C ничего подобного нет. Память может выделяться на стеке, но отнюдь не обязательно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 12 2008, 19:20
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ Oct 12 2008, 20:35) *
В стандарте C ничего подобного нет.

Ну слов stack, действительно нет, ибо это уже архитектурные особенности, однако всякие варианты storage описаны более, чем подробно и на машинах со стековой архитектурой локальные хранятся, естественно, в стеке. Причем, storage duration их должно по любому обеспечиваться правильно, иначе, например, рекурсивные вызовы функции идут лесом...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Oct 12 2008, 19:29
Сообщение #8


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Oct 12 2008, 22:35) *
В стандарте C ничего подобного нет. Память может выделяться на стеке, но отнюдь не обязательно.
Читать "стэк" как временная память...(может и в регистрах)
То есть по сути все равно стек... хотя возможно и программный...(на уровне компилятора)
Go to the top of the page
 
+Quote Post

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

 


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


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