Mondan Posted April 14, 2015 Share Posted April 14, 2015 Am primit eroarea asta in MikroC. Programul, tradus in ASM a depasit o anumita limita. Adica poti face doar un program, care la compliare sa-ti dea sub o anumita limita, As prefera MikroC, deoarece are procedurille pe care le folosesc definite. Aveti idee de vre un artificiu ? Ma gandeam sa fac doar o parte din program in MIkroC si restul in ASM inalt compilator, dar nu stiu cum ar merge asa......? Sa-i dau ceva gen ORG 0X.... Las astfel un spatiu liber nescris in HEX. Pe care il completez cu HEX-ul de la alt compilator. Si instructiuni jmp dintr-un loc in altul. Link to comment
Liviu M Posted April 14, 2015 Share Posted April 14, 2015 Aveti idee de vre un artificiu ?Sa cumperi varianta full? Link to comment
Vezi Muti Posted April 14, 2015 Share Posted April 14, 2015 ...sau postezi codul sursa. poate se gaseste cineva sa-l faca sa incapa. ps: sper ca nu faci si tu un ceas (cu cuc) si ai o jena in a posta codul sursa. Link to comment
Liviu M Posted April 14, 2015 Share Posted April 14, 2015 poate se gaseste cineva sa-l facaPai daca tot e de muncit si facut altfel decat cu functii din biblioteci, atunci poate incerca direct cu xc8, de la uChip. Link to comment
Mircea Posted April 15, 2015 Share Posted April 15, 2015 Dane, daca vrei sa pui cod ASM in MikroC, faci ca in linkul asta: http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/asm_declaration.htm Link to comment
Mondan Posted April 15, 2015 Author Share Posted April 15, 2015 ps: sper ca nu faci si tu un ceas (cu cuc) Daca cuc numesti ds1307, atunci da, fac ceas cu cuc. Codul sursa nu-l postez ca nu e pentru mine. Dar daca vreti un tutorial, despe cum se face, pot sa ma 'inscriu'. Link to comment
Bandi Szasz Posted April 15, 2015 Share Posted April 15, 2015 (edited) O optiune este cum a zis si colegul mai sus cu xc8. M-am lovit si eu de problema asta, prima data am facut cu xc8 dupa acea am incercat si flowcode ( am folosit bloc de "C code"). Nu stiu cat de priceput esti la scris cod, dar daca codul nu depaseste cu foarte mult acea limita, codul se poate 'optimiza' , de exemplu eu ma apuc si scriu codul. Dupa ce am terminat il iau de la capat si ma uit unde se poate comprima acel cod, poate am scris 4 linii de cod care s-ar putea inlocuii cu unul sau doua , in acea maniera am reusit sa reduc codul si cu pana la 0.5-0.6k ( limita este de 2k) Edited April 15, 2015 by bandi12 Link to comment
one Posted April 21, 2015 Share Posted April 21, 2015 Vezi daca poti sa elimini din librariile complexe ( functii matematice in general: trigonometrice, logaritmi, calcule in virgula mobila). Vezi daca poti sa optimizezi codul (ex. faci un ciclu in loc sa scrii de mai multe ori operatii). Nu ar fi prea mare lucru de facut. Versiunea pentru AVR are 4K free si cu aceasta am reusit sa scriu cateva programe pentru aparate de masura (citire ADC extern, prelucrare date, afisare). Dar la PIC cred ca instructiunile ocupa mai multa memorie si de aceea este limitat la 2K, limita care se atinge destul de repede. Pentru dimensiuni mai mari, preferabil sa gasesti un alt compilator. Link to comment
Mondan Posted April 21, 2015 Author Share Posted April 21, 2015 Vezi daca poti sa elimini din librariile complexe ( functii matematice in general: trigonometrice, logaritmi, calcule in virgula mobila). Da, corect, astra ocupau memorie. Eu aveam IntToStr()...... Si am scris restul impartirii la 10 gen nr.%10 +48(ASCII aadjust) <PIC cred ca instructiunile ocupa mai multa memorie si de aceea este limitat la 2K, > Pai din contra, invers, ca e controller RISC fata de CISC la Atmel ar trebui sa sa fie limita mai mare. Am terminat programul fara sa mai imi dea eroarea asta. DSe asrta n-am mai scris la acest subiect. Link to comment
Liviu M Posted April 21, 2015 Share Posted April 21, 2015 (edited) Features • High-performance, Low-power Atmel AVR8-bit Microcontroller •Advanced RISC Architecture Edited April 21, 2015 by Liviu M Link to comment
one Posted April 21, 2015 Share Posted April 21, 2015 (edited) Pai din contra, invers, ca e controller RISC fata de CISC la Atmel ar trebui sa sa fie limita mai mare. Si Atmel este RISC, dar are mai multe instructiuni si registre acumulatoare (acum depinde si cu ce PIC facem comparatia.) Cu cat ai mai putine instructiuni , cu atat o operatie banala o faci cu mai multe linii in ASM, este cam invers. Exemplu: la AVR ldi r0,0x10; ldi r1, 0x20; add r1, r0; // fiecare linie 2 octeti si se executa 1 linie pe ciclu de clock La PIC movlw 0x10; movwf x; movlw 0x20; movwf y; movf x,w; addwf y,w; fiecare dintre aceste linii ar fi 2 octeti si se executa in 4 cicluri de clock. in practica de 2 ori mai multa memorie (si de 6 ori mai lent dar asta nu e important oricum nu doresc sa intru in polemica). Daca am gresit va rog sa ma corectati nu prea am mai pus mana pe PIC de vreo 15 ani. Repet totusi ce am spus si mai devreme, depinde si despre ce PIC vorbim (am presupus 8biti). Edited April 21, 2015 by one Link to comment
Liviu M Posted April 21, 2015 Share Posted April 21, 2015 Nu prea stiu assembler, asa ca intreb si eu. Asta movlw 0x10;movwf x;movlw 0x20;movwf y;movf x,w;addwf y,w; nu e acelasi lucru cu movlw 0x10;movwf x;movlw 0x20;addwf x,w; Link to comment
one Posted April 21, 2015 Share Posted April 21, 2015 (edited) In practica, nu prea aduni 2 constante, ci 2 variabile sau 1 variabila cu o constanta. Altfel, compilatorul ar trebui sa inlocuiasca toata poezia direct cu rezultatul fara sa se mai execute in micro. Exemplul era generic, pentru functiile matematice sunt niste functii deja scrise care doar preiau datele transmise prin anumite variabile. in C avem acelasi lucru si pentru PIC si pentru AVR: c = a + b; in assembler insa la PIC sunt mai multe instructiuni pentru a face asta, mai ales daca functia primeste variabile pe mai multi octeti. Este posibil ca exemplul meu sa fie superficial dar cred ca ati inteles ideea. Cei de la Mikroelektronica trebuie sa dea 8K la versiunea free pentru PIC, nu 2K Edited April 21, 2015 by one Link to comment
Vezi Muti Posted April 21, 2015 Share Posted April 21, 2015 Poate asa este mai bine asa: 2K limita. In acest fel te obliga sa gandesti si sa inveti cand faci codul. 2K este un spatiu imens pentru licurici, ceasuri cu cuc sau alte jucarele. ps: Mondan, daca tot ai resolvat problema, spune-ne si noua cum ai reusit. Poate mai are cineva de invatat din asta. Altfel avem iar un post fara rost. De genul: "Am o problema... Merci, dar am resolvat-o singur." Link to comment
Mondan Posted April 21, 2015 Author Share Posted April 21, 2015 (edited) Am spus deja, <Vezi daca poti sa elimini din librariile complexe> Ce poti sa scrii tu, scrii tu si gata. De exemplu nu are niciun rost impartirea la 3.5 (cum avam eu), cand poti sa imparti la 2 sau la 4. Si modifici divizlorul rezistiv de la A/D sa dea asa. Evident impartirea la 2 sau 4 e scris a ca shift. Inmultirea cu 10 este x2+x8 tot shift. @Vezi M tu esti cu ochii pe astea, daca spun vreo tampenie..... Edited April 21, 2015 by Mondan Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now