| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| PIC +C проблем http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1880 |
Страница 1 от 2 |
| Автор: | setoy [ Пет Фев 24, 2006 9:48 am ] |
| Заглавие: | PIC +C проблем |
Мъча един 16F88 и стигнах дотам че ми трябва масив от 256 байта с 2 указателя към него. CCS обаче не иска да ми отдели повече от 80-90 байта, дава че нямало достатъчно, макар тая гадинка да има 4 банки по 128, като във всяка най-отгоре са 10-20 байта за служебни регистри, а най долните 16 са "public" ... Все смятам, че трябва да има и по-лесен начин. Някой борил ли се е с нещо подобно? |
|
| Автор: | setoy [ Пет Фев 24, 2006 9:49 am ] |
| Заглавие: | |
А задачката не е достатъчно сериозна че да си струва да се минава на 18F.... |
|
| Автор: | t_i_t_o [ Пет Фев 24, 2006 10:36 am ] |
| Заглавие: | |
nai tupoto reshenie koeto az izpolzwah wednuz w tozi sluchai e - defifnirash si dwa po malki masiwa i w zawisimost kolkoti e indeksa se obryshtash kym ediniq ili kum drugiq, t.e. emulirash si programno po golqm masiw... sorry za latinicata |
|
| Автор: | backson [ Пет Фев 24, 2006 11:03 am ] |
| Заглавие: | |
Имах същия проблем преди време на PIC18. При тях рама е разделен на страници по 256 и масива с мсксимален брой елементи е <=256. Ако не се ползва директива за дефиниране на нова страница преди декларацията на масива, компилатора ще ти позволи създаване на на масив с доста по-малък брой елементи от 256, тъй като в страницата е заделено място и за др. променливи. Пример за декларация на масива би бил това: #pragma udata inputbufferdata = 0x300 unsigned char input_buffer[256]; за съжаление аз използвам С18, но виж и в ССS трябва да има някакви директиви. Ако искаш да направиш кръгов буфер с два указателя за четене и запис в него бих могъл да ти дам няколко хватки |
|
| Автор: | evc [ Пет Фев 24, 2006 11:57 am ] | |||||||||
| Заглавие: | ||||||||||
Прочети внимателно дейташийта преди да обвиняваш компилатора си! Процесора има само 368 клетки RAM. |
||||||||||
| Автор: | bobyk [ Пет Фев 24, 2006 12:13 pm ] |
| Заглавие: | |
Ето и от мен малко опит с 16f877 i miktoC, mikroPaskal не може да дефинираш масив по голям ~ 80byte, т.е. колкото е свободното в 1 банка (тук се сещам за анкетата на Кольо Така че 2 или 3 масива. |
|
| Автор: | Gogo [ Пет Фев 24, 2006 1:29 pm ] | |||||||||
| Заглавие: | ||||||||||
Тука си в грешка градски! Аз имам в момента 2 масива по 256 (точно) и един 2048 на 18F4620. |
||||||||||
| Автор: | setoy [ Пет Фев 24, 2006 2:21 pm ] |
| Заглавие: | |
аха за анкетата се сещам, много ми е актуално благодаря за отговорите! @evk, даташийтовете съм си ги изчел доста внимателно, но тя явно не си прочел внимателно поста ми. 4*128 - SFR's(0-0х1f) -3*16(адреси 0х7f-0х70)=368, но 368<256,остава си достатъчно място все пак но явно моя компилатор не е достатъчно умен да се сети да задели памет в няколко банки,то това ми беше и въпроса всъщност. ина4е ето така става номера в CCS: int a1[80],a2[80],a3[96]; int *read,*write; #locate a1=0x20 #locate a2=0xa0 #locate a3=0x110 явно ще трябва да си напиша и функция да превклучва указателя между банките когато трябва някой ако знае по умен начин? @Гого : "Тука си в грешка градски! Аз имам в момента 2 масива по 256 (точно) и един 2048 на 18F4620." и как става? Не ми се е налагало досега да заделям големи масиви в малък PIC |
|
| Автор: | evc [ Пет Фев 24, 2006 2:32 pm ] | |||||||||
| Заглавие: | ||||||||||
Колкото и внимателно да го чета, все не го схващам! Освен ако става въпрос за Неевклидова геометрия. |
||||||||||
| Автор: | setoy [ Пет Фев 24, 2006 3:03 pm ] |
| Заглавие: | |
eee...PIC-a си има 368 RAM, a na men mi трябва 256 само,какво странно има? Първите 3 банки само за буфера, а всичко останалото наблъскано в 4-тата. |
|
| Автор: | setoy [ Пет Фев 24, 2006 3:06 pm ] | |||||||||
| Заглавие: | ||||||||||
мда, точно това искам |
||||||||||
| Автор: | Gogo [ Пет Фев 24, 2006 4:25 pm ] | |||||||||
| Заглавие: | ||||||||||
Ами 4620 не е много малък. Като ми потрябва С компилатор за 18-ка, ползвам майкрочипския. Там това с големите масиви не е особено голям проблем. |
||||||||||
| Автор: | backson [ Пет Фев 24, 2006 5:42 pm ] |
| Заглавие: | |
Я кажи градски как си декларирал масив 2048 байта на С18 без да ползваш няколко по 256, че и аз си блъскам главата тука |
|
| Автор: | ¶ [ Пет Фев 24, 2006 7:33 pm ] | |||||||||
| Заглавие: | ||||||||||
@bakson, използвай CCS, там тия неща стават без проблем:
|
||||||||||
| Автор: | ¶ [ Пет Фев 24, 2006 7:38 pm ] | ||||||||||||||||||
| Заглавие: | Re: PIC +C проблем | ||||||||||||||||||
@setoy, има начин това да го направиш, не се отчайвай така лесно. По подразбиране масивите при 16-ките в CCS се адресират с 8-битов адрес, така че затова не иска да ти отдели повече RAM. Напишо в началото на програмата следното:
и пак компилирай. Така ще ти задели нужната памет, стига наистина да я има. При 8-битова адресация ти заделя толкова, колкото е налична в най-празната банка RAM. Успех ! |
|||||||||||||||||||
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|