Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Масив в ПРОГРАМНАТА памет с HI-TECH PICC-18
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4667
Страница 1 от 1

Автор:  juzisound [ Вто Авг 21, 2007 10:10 am ]
Заглавие:  Масив в ПРОГРАМНАТА памет с 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:

Автор:  Predator_MF [ Вто Авг 21, 2007 11:18 am ]
Заглавие: 

Не можеш да инициализираш така само един от елементите на pesen[100], ако ще инициализираш - пишеш всичките 100 елемента или на някакво място в програмата инициализираш който си искаш елемент

Автор:  juzisound [ Вто Авг 21, 2007 12:13 pm ]
Заглавие: 

Абе аз му схванах идеята - след малко размисли на студена водичка...

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

Автор:  Yanek [ Вто Авг 21, 2007 12:32 pm ]
Заглавие: 

juzisound написа:
Абе аз му схванах идеята - след малко размисли на студена водичка...

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


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

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

Автор:  juzisound [ Вто Авг 21, 2007 12:39 pm ]
Заглавие: 

Има - persistent, ама всички проби да и улуча мястото бяха неуспешни. Иначе съм по-спокоен де :wink:

Автор:  Ки4о [ Вто Авг 21, 2007 2:03 pm ]
Заглавие: 

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

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/