Mar Postat Noiembrie 17, 2005 Partajează Postat Noiembrie 17, 2005 Am vazut pe internet ca se pot utiliza macrouri pentru PIC . Va rog sa-mi dati si mie citeva sfaturi referitor la acest subiect ca nu stiu de unde sa incep si daca aveti un exemplu mi-ar fi foarte util. Multumesc :prayer: :prayer: :prayer: :prayer: :prayer: Link spre comentariu
bogdanm Postat Noiembrie 17, 2005 Partajează Postat Noiembrie 17, 2005 Errr .. un exemplu? Ce-s alea "macrouri pentru PIC"? Link spre comentariu
Cristiano Postat Noiembrie 17, 2005 Partajează Postat Noiembrie 17, 2005 Banuiesc ca te referi la utilizarea de macro-uri in Mpasm assembler:Pornesti MPLAB IDE. Apoi Help->Topics->Language Tools->MPASM Assembler->MPASM Assembler->Macro Language Link spre comentariu
Mar Postat Noiembrie 18, 2005 Autor Partajează Postat Noiembrie 18, 2005 Da despre macro linguage vorbeam, poti sa-mi dai si mie un exemplu? Cum pot sa il utilizez in programul meu? Multumesc Link spre comentariu
MirceaM Postat Noiembrie 18, 2005 Partajează Postat Noiembrie 18, 2005 Macroinstructiunea consta dintr-un numar de instructiuni aflate intre anumite 2 linii: MACRO si ENDM. In linia MACRO se precizeaza numele Macroinstructiunii si eventualii parametri. In locul in care este definita (intre MACRO si ENDM) nu se consuma memorie de program, nici macar o locatie. In timpul compilarii (asamblarii, generarii codului masina) Macroinstructiunea "se depune" cu totul, cu toata lungimea instructiunilor ce o compun in locul invocarii, al oricarei invocari. Acesta (faptul ca se mareste lungimea programului) ar fi dezavantajul fata de o subrutina, caz in care corpul subrutinei zace intr-un singur loc si invocarea se poate face din oricate locuri, cu o singura instructiune (call). Macroinstructiunile au insa avantajul ca tehnologia de apel nu utilizeaza stiva, care este destul de mica la multe controllere (PIC-uri).Exista PIC-uri care au doar 2 nivele pe stiva, altele au 8, altele au ceva mai mult - oricum sunt cazuri cand nu mai poti sa faci nici macar un call, utilizand stiva "hard", pentru motivul ca este plina. In acest caz fie se fac anumite smecherii pt a crea un fel de stiva in memoria ram fie se utilizeaza macroinstructiuni. Mai sunt si situatii (anumite programe de test memorie) in care stiva (deci nu neaparat la controllere) face parte dintr-o memorie ce inca nu a fost testata, deci nu se poate pune - inca - registrul SP (stack pointer) sa pointeze acolo. In asemenea cazuri tot macroul poate fi salvarea. Link spre comentariu
Mar Postat Noiembrie 18, 2005 Autor Partajează Postat Noiembrie 18, 2005 Multumesc pentru raspuns Eu, pentru a pune o valoare 03h in PORTA am scris asa: movlw 03h movwf PORTA Cum scriu eu aceasta valoare utilizind macro? eu am vazut un program cu macro care este asa: nume macro pres ... ... endm dar acest pres (acest pres e un parametru) nu este definit si asta nu inteleg pentru ca eu in programul meu il definesc asa: pres equ 0x10 Link spre comentariu
MirceaM Postat Noiembrie 18, 2005 Partajează Postat Noiembrie 18, 2005 Multumesc pentru raspuns Eu, pentru a pune o valoare 03h in PORTA am scris asa: movlw 03h movwf PORTA Cum scriu eu aceasta valoare utilizind macro? eu am vazut un program cu macro care este asa: nume macro pres ... ... endm dar acest pres (acest pres e un parametru) nu este definit si asta nu inteleg pentru ca eu in programul meu il definesc asa: pres equ 0x10 MACRO fara parametri--------------------------------------- In zona de la inceputul programului, pe unde ai EQU-uri, se definesc si macrourile, ca acesta: AAAA MACRO movlw 03h movwf PORTA ENDMIn zona de program, dupa start sa spunem sau in interiorul unei subrutine, practic oriunde, va putea sa apara invocarea: instructiuni AAAA instructiuniAsta va face ca intreg corpul macroului sa se depuna (sa expandeze) in locul liniei in care este apelat (invocat). Deci in realitate va arata asa: instructiuni movlw 03h movwf PORTA instructiuniOricare alta invocare va face acelasi lucru, macroul expandeaza in locul tuturor invocarilor. MACRO cu parametri --------------------------------------- Acuma, sa spunem ca nu vrei sa trimiti neaparat valoarea 3 la PORTA ci ceva dependent de la un "apel" la altul al macroului. Macroul va arata asa: BBBB MACRO UnNumeDeParametru movlw UnNumeDeParametru movwf PORTA ENDM Daca in program apare o invocare de forma: instructiuni BBBB 0x55 instructiuni atunci forma expandata va fi: instructiuni movlw 0x55 movwf PORTA instructiuni Pentru o alta invocare, cu alta valoare a parametrului, de exemplu: instructiuni BBBB 0xAA instructiuni forma expandata va fi: instructiuni movlw 0xAA movwf PORTA instructiuni Asa se paseaza parametrul. Invocare macro si apel macro este totuna. In definirea macroului trebuie sa apara un nume formal al parametrului (ales de tine, un nume sugestiv in raport cu semnificatia lui, practic orice nume) iar in linia de invocare trebuie sa apara valoarea efectiva a parametrului. Se poate si cu mai multi parametri, pur si simplu se scriu in continuare. Vezi ca in fisierul LST toate instructiunile care provin din expandari de macrouri au un "+", dupa asta se pot recunoaste. Link spre comentariu
Mar Postat Noiembrie 18, 2005 Autor Partajează Postat Noiembrie 18, 2005 Acum am inteles Multumesc 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