Отговори на тема  [ 20 мнения ]  Отиди на страница Предишна  1, 2
PIC +C проблем 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
backson написа:
Я кажи градски как си декларирал масив 2048 байта на С18 без да ползваш няколко по 256, че и аз си блъскам главата тука :) пък ше черпа. Фърли и малко от кода на С

Код:
#include   <p18f8525.h>
#include   <string.h>

#define lamp      PORTGbits.RG2      //Lamp for tests

#pragma udata videoram=0x400
   unsigned char v_ram[2048];
     char * vram = &v_ram[0];
#pragma udata hibuf=0xc00
   unsigned char h_buf[256];
     char * hbuf = &h_buf[0];
#pragma udata lobuf=0xd00
   unsigned char l_buf[256];
     char * lbuf = &l_buf[0];
//*****************************************************
void   main   (void)

{
   lamp = 1;   
   TRISGbits.TRISG2 = 0;             //RG2 - output
   memset (vram, 0, sizeof(v_ram));   //clear videoram
//   memset (&vram[3], 0, 256);         //clear range of videoram
//   v_ram[5] = 1;                  // = &vram[5] = 1;
   memset (lbuf, 0, sizeof(l_buf));
   memset (hbuf, 0, sizeof(h_buf));
   while (1) lamp = 0;

}


И една корекция в 18f8525.lkr

Код:
DATABANK   NAME=gpr2       START=0x200          END=0x2FF
DATABANK   NAME=gpr3       START=0x300          END=0x3FF
DATABANK   NAME=big        START=0x400          END=0xBFF
//DATABANK   NAME=gpr4       START=0x400          END=0x4FF
//DATABANK   NAME=gpr5       START=0x500          END=0x5FF
//DATABANK   NAME=gpr6       START=0x600          END=0x6FF
//DATABANK   NAME=gpr7       START=0x700          END=0x7FF
//DATABANK   NAME=gpr8       START=0x800          END=0x8FF
//DATABANK   NAME=gpr9       START=0x900          END=0x9FF
//DATABANK   NAME=gpr10      START=0xA00          END=0xAFF
//DATABANK   NAME=gpr11      START=0xB00          END=0xBFF
DATABANK   NAME=gpr12      START=0xC00          END=0xCFF
DATABANK   NAME=gpr13      START=0xD00          END=0xDFF

иначе не става :)

Между другото, това е описано подробно в един от пдф-ите на компилатора (не помна точно кой).


Пет Фев 24, 2006 9:27 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Цитат:
@setoy, има начин това да го направиш, не се отчайвай така лесно. По подразбиране масивите при 16-ките в CCS се адресират с 8-битов адрес, така че затова не иска да ти отдели повече RAM. Напишо в началото на програмата следното:
Код:

#DEVICE *=16

и пак компилирай. Така ще ти задели нужната памет, стига наистина да я има. При 8-битова адресация ти заделя толкова, колкото е налична в най-празната банка RAM.


Пирев, благодаря ти, но това го пробвах и преди и не става, ето резултата:

Код:
#include <16F88.h>
#device *=16
#FUSES NOWDT, INTRC_IO, NOPUT, NOMCLR, BROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, FCMEN, NOIESO
#use delay(clock=8000000,RESTART_WDT)

int8 a[120];
void main()
{
}


error 74 Not enouch RAM for all variables

а ина4е тази опция си от зна4ение.
Код:
#include <16F88.h>
#device *=16
#FUSES NOWDT, INTRC_IO, NOPUT, NOMCLR, BROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, FCMEN, NOIESO
#use delay(clock=8000000,RESTART_WDT)

int8 a[80],a2[80],a1[96];
void main()
{
}




CCS PCM C Compiler, Version 3.235, 16465 28-Ôåâðóàðè-06 11:59

Filename: C:\Program Files\PICC1\test4e.LST

ROM used: 19 words (0%)
Largest free fragment is 2048
RAM used: 261 (71%) at main() level
261 (71%) worst case
Stack: 0 locations

Ако я премахна - отново няма памет. Ако без нея указа твърфи адреси на трите масива с #locate - памет има, но дава

    RAM used: 165 (94%) at main() level
    165 (94%) worst case
    Stack: 0 locations


....абе луда работа. Нямам време сега да разучавам приумиците на тъпия компилатор, така ще го с функция на ниско ниво, ама все пак е тъпо да не става :(


Вто Фев 28, 2006 1:12 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Верно, че не иска :oops: С 18-ките CCS не се държи така, заделял съм голям масив за 18-ка и е работело. Явно CCS за 16-ките за един масив може да задели максимум една банка RAM. Освен тия 120 байта да ги разположиш ръчно в две банки, примерно първата половина от 0x20, втората от адрес 0xA0, за да можеш само с бит 7 да превключваш ту едната половина, ту другата половина. И да си направиш get/set функции, с които да имаш достъп до масива, няма да е много елегантно но ще стане. Пък и така ще го направиш с по-кратък код, отколкото би генерирало CCS.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Фев 28, 2006 4:12 pm
Профил WWW
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Дек 21, 2005 2:09 pm
Мнения: 145
Мнение 
Gogo ти компилираш през CCS, а аз ползвам MPLAB C18. Сигурно има некав бъг. Тука и колегата си блъска и той главата накрая си направи 4 масива по 256. Просто C18 не иска да обедини няколко банки RAM pri deklaraciqta :(


Чет Мар 02, 2006 11:57 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
backson написа:
Gogo ти компилираш през CCS, а аз ползвам MPLAB C18. Сигурно има некав бъг. Тука и колегата си блъска и той главата накрая си направи 4 масива по 256. Просто C18 не иска да обедини няколко банки RAM pri deklaraciqta :(


CCS даже го нямам инсталиран на компа. Това е за С18 на майкрочип и си работи. Гледай внимателно да не пропускаш нещо.


Чет Мар 02, 2006 6:57 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 20 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

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


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

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