|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 5:12 pm
| Автор |
Съобщение |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
 PIC +C проблем
Мъча един 16F88 и стигнах дотам че ми трябва масив от 256 байта с 2 указателя към него. CCS обаче не иска да ми отдели повече от 80-90 байта, дава че нямало достатъчно, макар тая гадинка да има 4 банки по 128, като във всяка най-отгоре са 10-20 байта за служебни регистри, а най долните 16 са "public" ...  дали заради тва "гениално" разпределение компилатора не може да ми отдели памет? Аз бих могъл да си адресирам масива през fsr индиректно като в асемблера и да ползвам първите 3 банки , но как да съм сигурен тогава, че компилатора няма да запише нищо там, смятайки че са свободни?
Все смятам, че трябва да има и по-лесен начин. Някой борил ли се е с нещо подобно?
|
| Пет Фев 24, 2006 9:48 am |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
А задачката не е достатъчно сериозна че да си струва да се минава на 18F....
|
| Пет Фев 24, 2006 9:49 am |
|
 |
|
t_i_t_o
Ранг: Почетен член
Регистриран на: Вто Окт 25, 2005 10:54 am Мнения: 896
|
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
|
| Пет Фев 24, 2006 10:36 am |
|
 |
|
backson
Ранг: Новодошъл
Регистриран на: Сря Дек 21, 2005 2:09 pm Мнения: 145
|
Имах същия проблем преди време на PIC18. При тях рама е разделен на страници по 256 и масива с мсксимален брой елементи е <=256. Ако не се ползва директива за дефиниране на нова страница преди декларацията на масива, компилатора ще ти позволи създаване на на масив с доста по-малък брой елементи от 256, тъй като в страницата е заделено място и за др. променливи. Пример за декларация на масива би бил това:
#pragma udata inputbufferdata = 0x300
unsigned char input_buffer[256];
за съжаление аз използвам С18, но виж и в ССS трябва да има някакви директиви. Ако искаш да направиш кръгов буфер с два указателя за четене и запис в него бих могъл да ти дам няколко хватки
|
| Пет Фев 24, 2006 11:03 am |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Прочети внимателно дейташийта преди да обвиняваш компилатора си! Процесора има само 368 клетки RAM.
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Пет Фев 24, 2006 11:57 am |
|
 |
|
bobyk
Ранг: Ориентиран
Регистриран на: Пон Яну 09, 2006 11:32 am Мнения: 276 Местоположение: Kozloduy
|
Ето и от мен малко опит с 16f877 i miktoC, mikroPaskal
не може да дефинираш масив по голям ~ 80byte, т.е. колкото е свободното в 1 банка (тук се сещам за анкетата на Кольо  )
Така че 2 или 3 масива.
|
| Пет Фев 24, 2006 12:13 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Тука си в грешка градски! Аз имам в момента 2 масива по 256 (точно) и един 2048 на 18F4620.
|
| Пет Фев 24, 2006 1:29 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
аха за анкетата се сещам, много ми е актуално
благодаря за отговорите!
@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

|
| Пет Фев 24, 2006 2:21 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Пет Фев 24, 2006 2:32 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
eee...PIC-a си има 368 RAM, a na men mi трябва 256 само,какво странно има? Първите 3 банки само за буфера, а всичко останалото наблъскано в 4-тата.
|
| Пет Фев 24, 2006 3:03 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
мда, точно това искам 
|
| Пет Фев 24, 2006 3:06 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Ами 4620 не е много малък. Като ми потрябва С компилатор за 18-ка, ползвам майкрочипския. Там това с големите масиви не е особено голям проблем.
|
| Пет Фев 24, 2006 4:25 pm |
|
 |
|
backson
Ранг: Новодошъл
Регистриран на: Сря Дек 21, 2005 2:09 pm Мнения: 145
|
Я кажи градски как си декларирал масив 2048 байта на С18 без да ползваш няколко по 256, че и аз си блъскам главата тука  пък ше черпа. Фърли и малко от кода на С
|
| Пет Фев 24, 2006 5:42 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
@bakson, използвай CCS, там тия неща стават без проблем:
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Фев 24, 2006 7:33 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: PIC +C проблем
@setoy, има начин това да го направиш, не се отчайвай така лесно. По подразбиране масивите при 16-ките в CCS се адресират с 8-битов адрес, така че затова не иска да ти отдели повече RAM. Напишо в началото на програмата следното:
и пак компилирай. Така ще ти задели нужната памет, стига наистина да я има. При 8-битова адресация ти заделя толкова, колкото е налична в най-празната банка RAM.
Успех !
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Фев 24, 2006 7:38 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|