MPLAB - používání externích souborů pro ASM kód

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
kony2807
Příspěvky: 305
Registrován: 29 črc 2007, 00:00
Bydliště: Ostrava

MPLAB - používání externích souborů pro ASM kód

#1 Příspěvek od kony2807 »

Zdravím !
Měl bych takový malicherný problém v prostředí MPLAB. Jelikož se mi kód občas rozroste přes 2000 řádků , hledám možnost , jak kusy subrutin umístit do samostatného souboru a následně je jen nějak přiřadit do hlavního ASM souboru a provádět odskoky do těchto součástí .
Příklad : obsluha maticového displeje - danou část kódu oddělím do samostatného souboru, z hlavního souboru pak jen zavolám hlavičky v tomto samostatném kusu obsažené (init , odeslání znaku , ap.) .
Existuje vůbec nějaká taková možnost v tomto prostředí ?
Z letmého prostudování manuálu moc moudrý nejsem , proto žádám o radu i zdejší zkušenější .
Za každou odpověď předem děkuji !
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#2 Příspěvek od procesor »

použiješ instrukciu #include <file>
napr. v file SCHUdef.inc mám často používané definície
Tento súbor sa uloží pri preklade na miesto tejto instrukcie

Kód: Vybrat vše

   #include <SCHUdef100.inc>   ; DEFINICIE NAJMA BITOVE OPERACIE a pod...
;


alebo modul prerušení vložím kde potrebujem

Kód: Vybrat vše

;==================================================================================
   #include <SCHUit100.inc>
;==================================================================================


Iná možnosť je používať MACRO uložené v súbore macro.mac
Uživatelský avatar
kony2807
Příspěvky: 305
Registrován: 29 črc 2007, 00:00
Bydliště: Ostrava

#3 Příspěvek od kony2807 »

Liší se soubory *.inc nějak svou syntaxí oproti běžnému ASM souboru ? Pokud to dobře chápu , do INC si mohu napsat pouze definice bitů , případně def. jednotlivých byte v RAM , ale kus kódu , na který v nadřízeném hlavním souboru odkážu pouze pomocí goto/call hlavička_časti už zde zapsat nemohu .
O makrech jako samostatných souborech jsem zatím bohužel nic kloudného nenašel , za odkaz na popis , či ještě lépe vysvětlení budu vděčný .
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#4 Příspěvek od procesor »

Ničím sa nelíšia od asm. Môže sa to menovať aj inak. MPLAB nemá na názvy zdrojových súborov špeciálne požiadavky. Viac menej je to len kvôli prehľadnosti. Takto označované súbory nie sú samostatné zdrojové texty a sú určené na vkladanie do hlavného zdrojového súboru...preto sa používa prípona .inc.
K veci:
Akúkoľvek časť zdrojového kódu si presuniem do ľubovolného súboru.
V zdrojovom kóde si ponechám odkaz na túto časť ako #include <file.xxx>.
Pri preklade sa obsah <file.xxx> v tomto mieste pripojí a prekladá ako by tá časť bola súčasťou prekladaného textu-zdroja.

Toto platí aj o tzv. hlavičkových súboroch pre jednotlivé procesory. Sú v nich zadefinované bity, registre a iné okolo jadra, periférií, pamätí a konfigurácie.
Keďže v úvode týchto súborov je použitý príkaz NOLIST v súbore.lst sa objaví nanajvýš hlavička. Súbor na konci musí mať príkaz LIST inak by sa nasledujúci preklad kódu nezapisoval do súbor.list
Uživatelský avatar
kony2807
Příspěvky: 305
Registrován: 29 črc 2007, 00:00
Bydliště: Ostrava

#5 Příspěvek od kony2807 »

Díky , aktuálně jsem ve stavu , kdy jsem úspěšně segmentoval kód do více bloků , které vzájemně spolupracují . Vyvstal ovšem problém s definicemi bitů , které využívá i kód subrutiny v samostatném souboru . Pokud oddělím i definice , následně je použiji jak v hlavním soubou tak v subrutinách , dostávám Err 115 - pokus o předefinování již jednou definované hodnoty - tzn. v celkovém překladu se duplicitně objeví jak ze zahrnutí v hlavním programu , tak ze zahrnutí všech subrutin . :roll:


Omlouvám se za své přiblbé otázky , v programování PICů se sice už nějaký ten pátek hrabu , ale v MPLABu zatím ovládám jen to nejnutnější - sledování registrů , diassebmly , log. analyzátor , stopky a podobné . :oops:
________________________________
"Představte si to ticho, kdyby lidé říkali jen to, co vědí." K.Čapek
Uživatelský avatar
procesor
Příspěvky: 5286
Registrován: 02 říj 2009, 00:00
Bydliště: PO

#6 Příspěvek od procesor »

Takto pracujem...
Vo file.asm je hlavná časť programu. Ostatné ako macro moduly mám v file_mac.inc, často používané definície vo file_def.inc, prerušovací program v file_it.inc.
Definície a makrá umiestňujem na začiatok

Pre znovu-definovanie treba najskôr použiť " #undefine name". Potom sa dá nanovo definovať.
Viac a podrobne tu:
http://ww1.microchip.com/downloads/en/d ... 33014h.pdf
Přílohy
MPLABprj.jpg
(158.23 KiB) Staženo 190 x
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“