Отговори на тема  [ 6 мнения ] 
Масив в ПРОГРАМНАТА памет с HI-TECH PICC-18 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение Масив в ПРОГРАМНАТА памет с HI-TECH PICC-18
Здравейте!
Имам следния проблем. Имам масив от структори, които искам да разположа в програмната памет, обаче не искам да ги инициалицирам. Какво става:

Структората ми е описана така:
struct pesen{ // Големина 24 байта
unsigned long first_sec;
unsigned long last_sec;
unsigned char used;
unsigned char name[15];
}

Масива от структори очаквах да го опиша така:
const struct pesen pesen[100];
обаче компилатора упорито се мъчи да го завре в RAM и естествено не успява.
Пробвах различни места на const - ама пак неще.

Ако обаче инициализирам само дори един елемент - отива си дето трябва. Ето така:
const struct pesen pesen[100] = { {0,0,0,""} };

Така ли трябва да е, или аз съм нещо :cry:


Вто Авг 21, 2007 10:10 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Не можеш да инициализираш така само един от елементите на pesen[100], ако ще инициализираш - пишеш всичките 100 елемента или на някакво място в програмата инициализираш който си искаш елемент


Вто Авг 21, 2007 11:18 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
Абе аз му схванах идеята - след малко размисли на студена водичка...

То понеже тия масиви са в програмната памет, компилатора трябва да каже какво да запише програматора там, ама докато не му кажа аз, се прави на луд и се мъчи да го завре в рама, въпреки че е деклариран като const. Неяснотата идва от там, че аз очаквах че сам ще му сложи нули, а той искал аз да му подскажа. И като инициализирам първата структора, той на своя глава инициализира и останалите пак с нула. Все ме гризе нещо че трябваше сам да ги инициализира с 0, ама айде - от мен да мине... :D


Вто Авг 21, 2007 12:13 pm
Профил WWW
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пет Юни 29, 2007 10:59 pm
Мнения: 113
Мнение 
juzisound написа:
Абе аз му схванах идеята - след малко размисли на студена водичка...

То понеже тия масиви са в програмната памет, компилатора трябва да каже какво да запише програматора там, ама докато не му кажа аз, се прави на луд и се мъчи да го завре в рама, въпреки че е деклариран като const. Неяснотата идва от там, че аз очаквах че сам ще му сложи нули, а той искал аз да му подскажа. И като инициализирам първата структора, той на своя глава инициализира и останалите пак с нула. Все ме гризе нещо че трябваше сам да ги инициализира с 0, ама айде - от мен да мине... :D


Ако това ще те успокои някои компилатори дори издават съобщение за грешка, ако нямаш поне един инициализиран елемент в променлива (в този случай масив от структури) обявена с const. За това пък имат специална дума (може и pragma директива), която обявява "променлива" от програмната памет като неинициализирана. Може би този компилатор също има такава.

Една малка поправка: структУра.


Вто Авг 21, 2007 12:32 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Май 27, 2006 12:37 pm
Мнения: 647
Местоположение: с. Згалево
Мнение 
Има - persistent, ама всички проби да и улуча мястото бяха неуспешни. Иначе съм по-спокоен де :wink:


Вто Авг 21, 2007 12:39 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Пробвах следното нещо,но може и да бъркам :
volatile signed char buf1[466];
в последствие:
buf1[0]=1;
buf1[1]=2;
buf1[210]=11;
buf1[211]=12;
buf1[212]=13;
buf1[213]=14;
И виждаш как си задава стойностите е програмната памет,не в RAM.


Вто Авг 21, 2007 2:03 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни