ramsesrr Postat Septembrie 5, 2010 Partajează Postat Septembrie 5, 2010 Cum pot schimba bankul de registri in C pt un 16f877A cu Hi-TECH PIC?In assembler stiu cum se face dar in C nu. Link spre comentariu
Vizitator Postat Septembrie 6, 2010 Partajează Postat Septembrie 6, 2010 De ce vrei sa-l schimbi? Nu e nimic rau ca bank 0 e folosit aproape tot. Link spre comentariu
ramsesrr Postat Septembrie 6, 2010 Autor Partajează Postat Septembrie 6, 2010 De ce vrei sa-l schimbi? Nu e nimic rau ca bank 0 e folosit aproape tot.Pai am un vector care trebuie sa contina 100 caractere,daca pun mai mult de 65 imi da eroare si imi spune ca nu am depasit dimensiunea bankului 0 Link spre comentariu
kit Postat Septembrie 6, 2010 Partajează Postat Septembrie 6, 2010 poate te descurca asta: editezi fisierul *.lkr corespunzator: din: DATABANK NAME=gpr0 START=0x60 END=0xFFDATABANK NAME=gpr1 START=0x100 END=0x1FFDATABANK NAME=gpr2 START=0x200 END=0x2FFDATABANK NAME=gpr3 START=0x300 END=0x3FFDATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTEDDATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTEDDATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTEDDATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTEDACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF ...unesti doua (sau mai multe) bankuri de memorie: DATABANK NAME=gpr0 START=0x60 END=0xFFDATABANK NAME=gpr1 START=0x100 END=0x1FF//DATABANK NAME=gpr2 START=0x200 END=0x2FFDATABANK NAME=gpr3 START=0x200 END=0x3FFDATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTEDDATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTEDDATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTEDDATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTEDACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF ...denumesti apoi sectiunea: SECTION NAME=BigBank RAM=gpr3in main.c definesti: #pragma udata BigBankunsigned char Vector[100];#pragmaasa ceva fac eu pt 18F452 & co, in C18. poate merge si la Hi-Tech LE: acum am vazut si atasamentul: se observa cu ochiul liber ca Bank0 are doar 0x60 (96 zecimal) de locatii alocate. unesti Bank1 cu 2, denumesti regiunea si vectorul il inghesui acolo... cred ca o sa mearga asa. tie iti incap doar 65 de locatii ale vectorului probabil pentru ca mai ai si alte variabile care sunt alocate tot in Bank0. asa cred eu, cel putin. bafta! Link spre comentariu
ramsesrr Postat Septembrie 6, 2010 Autor Partajează Postat Septembrie 6, 2010 nu gasesc fisierul .lkr Link spre comentariu
kit Postat Septembrie 6, 2010 Partajează Postat Septembrie 6, 2010 pai tot ce vezi in poza aia inclusa de tine in post este descris intr-un fisier. In asm este cu extensia *.lkr, se afla inc:\Program Files\Microchip\MPASM Suite\LKRin C18 are extensia *.lkr si se afla intr-o gramada de locuri, printre altele lac:\MCC18\bin\LKR\in cazul tau, Hi-Tech, trebuie sa vezi care fisier este utilizat, unde se afla si cum il modifici. bag mana in foc ca pe forumul dezvoltatorului exista problema asta, basca si solutia. arunca un ochi si acolo, poate gasesti explicatii mai la obiect, eu stiu cum se rezolva problema doar la modul generic, nu si aplicat la platforma ta de lucru.daca ai descurcat-o, pune si aici solutia, sa fie si pentru altii.bafta! Link spre comentariu
Liviu M Postat Septembrie 6, 2010 Partajează Postat Septembrie 6, 2010 In cazul picc nu se folosesc fisierele .lkr; picc vine cu propriile biblioteci. Din cate stiam eu (la picc-lite, versiuni mai vechi), ca sa declari o variabila in alt bank, se foloseste bankx la declarare. Vezi ca picc vine si cu manual ;) - F11 din mplab sau in directorul docs din calea in care ai instalat picc. Citat din manualul versiunii 9.60pl2 a picc-lite - pag 49: 3.4.9.2 Bank1, Bank2 and Bank3 Type QualifiersThe bank1, bank2 and bank3 type qualifiers are used to place static variables in RAM bank 1,RAM bank2 and RAM bank 3 respectively. Note that there is no bank0 qualifier. Objects default tobeing in bank0 if no other bank qualifier is used. All auto objects are positioned into bank0, alongwith function parameters. Examples of bank qualifier usage:An unsigned char in bank3:static bank3 unsigned char fred;A pointer to an unsigned char in bank2:bank2 unsigned char * ptr;A pointer to an unsigned char in bank3 with the pointer itself residing in bank2:bank3 unsigned char * bank2 ptr2; Link spre comentariu
kit Postat Septembrie 6, 2010 Partajează Postat Septembrie 6, 2010 pentru versiunea 9.70, in manual, la pag. 58 ai: 3.3.1 Object Size despre alocarea unui vector mai mare decat dimensiunea bankului de memorie gasesti ceva la http://www.htsoft.com/support/faqs.php#faq83 (si nu-i deloc incurajator) ca tine a mai patit si: http://www.microchip.com/forums/tm.aspx ... arge+array din ce am gasit eu despre picc, chestiile din C18 pe care le stiu eu se pare ca se regasesc in picc.ini. cam asa este descris picul tau in respectivul fisier: [16F877A]MAKE=MICROCHIPARCH=PIC14PROCID=877AROMSIZE=2000BANKS=4RAMBANK=20-7F,A0-EF,110-16F,190-1EFCOMMON=70-7FICD1RAM=70-70,1EB-1EFICD1ROM=1F00-1FFFICD2RAM=70-70,1E5-1F0ICD2ROM=1F00-1FFFDATABANK=2FLASHTYPE=READWRITE_AFLASH_READ=1FLASH_WRITE=4EEPROMSIZE=100in RAMBANK este definita valoarea maxim admisibila a unui vector. trebuie sa tii cont insa si de ICD, daca il folosesti.nu cred ca merge metoda propusa de mine mai sus (de fapt sunt sigur). memoria ram la 18fxxxx este organizata complet diferit fata de 16877a al tau (dupa cum se vede la pag 19 din manualul 16f877a). ram-ul tau nu este contiguu (spre deosebire de 18fxxxx), de aia nu poate gestiona vectori mai mari, care sa se labarteze pe mai multe bankuri. ca urmare iti datorez scuzele de rigoare, in postul anterior visam cu ochii larg inchisi. poate incerci sa rupi vectorul in 2? in cazul in care sunt valori fixe, poti lua in considerare sa le faci "hard-coded" adica sa le pui in ROM sau chiar EEPROM... bafta! Link spre comentariu
Vizitator Postat Septembrie 6, 2010 Partajează Postat Septembrie 6, 2010 Mama ce complicaciune! Data vitoare in loc de PIC incearca un microcontroller din familia AVR, alea au memoria continua, fara bancuri.Asta este doar unul dintre motivele pentru care evit sa mai folosesc PIC-uri.Sunt offtopic rau, cer scuze si nu ma mai bag! Link spre comentariu
ramsesrr Postat Septembrie 6, 2010 Autor Partajează Postat Septembrie 6, 2010 Mama ce complicaciune! Data vitoare in loc de PIC incearca un microcontroller din familia AVR, alea au memoria continua, fara bancuri.Asta este doar unul dintre motivele pentru care evit sa mai folosesc PIC-uri.Sunt offtopic rau, cer scuze si nu ma mai bag!Am facut deja proiectul pe AVR(atmega32) si am vrut sa il fac si pe PIC,pt a avea costuri mai mici deoarece in ultimul timp AVR-urile s-au scumpit foarte mult,dar cred ca voi renunta. Link spre comentariu
Liviu M Postat Septembrie 6, 2010 Partajează Postat Septembrie 6, 2010 Pai daca tot e productie nu hobby, poti incerca cu ceva din seria 18 F (18F452, de exemplu).Sunt multe tipuri pin-compatibile cu 16F877, cu mai multa memorie, cu periferice mai destepte si nu mult mai scumpe.Compilatoare gasesti si pentru ele; htsoft are si pentru seria 18F compilator in oferta.Si ca un argument "suprem" - din cate stiu eu, 16F877 sunt cam pe terminate. uChip nu le mai recomada pentru proiecte noi. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum