Jump to content
ELFORUM - Forumul electronistilor

MikroC demo limit


Mondan

Recommended Posts

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
  • Replies 20
  • Created
  • Last Reply

Top Posters In This Topic

  • Mondan

    6

  • Liviu M

    4

  • one

    4

  • Vezi Muti

    2

...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

poate se gaseste cineva sa-l faca

Pai 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

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

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 by bandi12
Link to comment

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

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

 

Features
• High-performance, Low-power Atmel AVR8-bit Microcontroller
•Advanced RISC Architecture
Edited by Liviu M
Link to comment

 

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 by one
Link to comment

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

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 by one
Link to comment

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

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 by Mondan
Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines