Jump to content
ELFORUM - Forumul electronistilor

ajutor MPLAB


Guest johnny

Recommended Posts

SALUT !am shi eu o mare rugaminte, vreau sa invat shi eu programare dar m-am lovit de o problema: Am incercat sa respect pasii din tutorial dar cand i-am dat build all mi-a afisat mesajul asta:MPLINK 3.90.01, LinkerCopyright © 2005 Microchip Technology Inc.Error - section 'INT_VECTOR' can not fit the absolute section. Section 'INT_VECTOR' start=0x00000004, length=0x00000010Errors : 1mesajul asta l-a afisat cand am incercat cu 16f84 si 16f628(pt astea am gasit documentatie si sant si mai ieftine) .Cu procesorul din tutorial PIC18F452 a mers.care este chestia?MPLAB-UL este versiunea7.01

Link to comment
  • Replies 11
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Probabil ca nu se potriveste alocarea memoriei.Daca ai pus F84, ai inclus si fisierul 16F84.inc sau asa ceva?A setat corect tipul procesorului in IDE?Adresa de start ptr intrerupere este acceasi la 16F84 si la 18F452? Banuiesc ca nu. Nu am lucrat cu 18F452.De asemenea, nu cred ca poti pune direct cod de 18F sa ruleze pe 16F. Cele doua nu sunt compatibile. Cauta un programel exemplu ptr 16F84.Cirip

Link to comment

Mi-a sarit si mie in ochi linkerul, dar probabil ca tutorialul arata cum sa compileze module obiect, nu numai cod absolut.Mi-a stat pe limba sa-i spun ca incepe cu ceva complicat, dar daca tutorialul asa e, mai rau il incurc daca vin cu idei diferite. Ai dreptate agora, era mai usor sa inceapa cu cod absolut.Mi-a dat si un PM si l-am rugat sa trimita un link la tutorial, ca sa vedem ce e acolo.Cirip

Link to comment

Ce este codul absolut? se refera la limbajul de programare sau la codul binar cu care lucreaza microcontrolerul? ;daca am inteles eu bine sant destui programatori care lucreaza direct in hexazecimal,dar mie mi-sa parut destul de dificil si limbajul de programare deci va dati seama ca pt mine codul hexa sau altul asemanator sant mult prea mult deocamdata.

Link to comment

cod absolut este caracteristic unui mod de lucru in care lucrezi in general cu un singur fisier, asm, in care toate adresele sunt bine definite (exemplu "xvar equ 0x0f") si eventual un header in care sunt puse diverse variabile pentru a usura citirea codului. Aici, in mod explicit, variabila xvar este stocata la adresa 0x0f. Tot in cazul codului explicit, organizarea codului se face cu ajutoarul directivei org.exemplu:org 0x06startcod...endcea de a doua varianta implica crearea de librarii de functii (presupunem ca ai o rutina de comanda pt un lcd, si nu ai chef sa o rescrii de fiecare data pentru fiecare aplicatie si nici nu vrei sa dai copy paste, pentru ca oricum trebuie sa modifici alocarea variabilelor in registri, deoarece arhitectura microcontrolerului pentru care a fost creata procedura nu corespunde cu cea pentru care lucrezi acum. de aceea creezi o librarie in care introduci aceasta functie. e un fel de dll sau unit in pascal). atunci, in librarie nu se mai declara explicit adresele pentru fiecare variabila necesara ci se specifica doar ca xvar in cazul nostru este o variabila nealocata.cand se pune cap la cap proiectul, trebuie specificata libraria (aici intervine mplib) si modul in care se leaga libraria (de fapt functiile necesare din ea), cu partile de cod (asm, care de data aceasta nu mai sunt declarate cu org, ci sunt declarate doar ca fiind cod si atat. (imi cer scuze pentru lipsa de exemple, dar nu le stiu pe de rost)), cu ajutorul lui mplink, caruia trebuie sa i se specifice cum sa aranjeze codul, si ce sa faca cu libraria.ei, in acest punct, unde trebuia sa scriu scriptul pt mplink, m-am blocat. daca cineva a folosit cu succes mplink, il rog sa continue povestea mea de aici.iar despre partea cu aia care citesc direct in hexa, cred ca e o pierdere de vreme chiar daca este posibila.

Link to comment

As mai adauga ca daca nu vrei sa folosesti un singur fisier sursa de tip macaroana sau sir de carnati (la surse de cateva pagini devine incomod) poti sparge sursa in module pe care le incluzi (cauta comanda de preprocesor #include) in fisierul care contine bucla principala.De asemenea, poti face alocare automata a adreselor din RAM (variabilele) la etichetele simbolice folosind directiva cblock (Cauta in help)Dar cred ca deja vorbesc de OZN-uri. Nu te speria. Incepe cu un program f simplu, cum ar fi :bucla addlw 0x1 goto buclasi vezi pe simulator cum se incrementeaza w-ul.A! Si asa cum iti ziceam si in mesajul personal, eu nu am folosit niciodata linkerul in proiectele mele personale. Am folosit include-uri ca sa descongestionez sursa si sa o fac mai usor de urmarit. O alta sugestie este sa comentezi cu generozitate sursele. Peste 3 luni nu vei mai stii ce ai facut acolo.Bafta!Cirip

Link to comment

Hai ca am inceput sa inteleg cate ceva: va multumesc frumos pt sfaturi si daca imi mai'' prind urechile'' pe undeva ,pot apela la ajutorul vostru?. Apropo," modulele" de care vorbeste Cirip in ultimul mesaj sunt cumva Macrourile (scuzati-mi ignoranta)

Link to comment

Apropo," modulele" de care vorbeste Cirip in ultimul mesaj sunt cumva Macrourile

Nu neaparat. Pot fi sectiuni de cod, subrutine, care pot contine si macrouri (nu pesti :) ). Modulele sunt blocuri functionale care are sens sa le separi. De ex ai o rutina de comunicare cu un afisaj LCD. Toata rutina aia o poti face intr-un fisier separat, de ex. lcd.inc (sau lcd.asm) pe care il incluzi in programul principal cu directiva #include lcd.inc . Ideea e ca nu te incurci cu surse de 1Km cand ai de modificat ceva.Daca mai intrebari/nelamuriri, hai incoa'!Cirip
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