Fórum témák
» Több friss téma |
Szia!
Nem ismerem az MPLAB-ot, de az #include "honap/Januar.asm" ; nem működik?
Tedd az almappába a fájlokat.
File menü -> Project properties -> XC8 compiler (vagy amit használsz) -> Include directories Itt tudsz mappákat hozzáadni. Elvileg megérti, ha a saját magad létrehozott mappát adod meg neki.
Kipróbáltam, bár az assembly nem így néz ki formailag, de lehet belső mappát létrehozni, de ott sem találja meg. Egyszerűen nem hajlandó azon a könyvtáron kívül keresni, mint ahol az alapprogram van.
De ott aztán bárhogy. Ha átkeresztelem .asm-ről .txt-re, vagy akár .inc-re, de írhatok neki .S-et, tehetem pipicsőr vagy idézőjel közé, minden formában betölti. Csak almappából, vagy külső helyről nem hajlandó az istennek sem. Pedig nekem ez kellene. A hozzászólás módosítva: Ápr 9, 2023
Nem programozok assembly-ben, de kíváncsiságból megnéztem, és van ilyen beállítás. Aztán hogy működik-e, azt nem tudom.
Én ezt a képet kapom, és ebben akár mit próbálok, az a menüsor ami a te képeden látszik, nem jön elő.
A két képen más-más fordító beállítását látni. A Képernyőkép.png -n a pic-as -ét, a Képkivágás.jpg -en az mpasm -ét. Sajnos az utóbbit az új MpLabX már nem támogatja.
Szia!
Nálam XC8-nál ez működik: Project (fül) –> Header Files (jobb egérgomb) New --> Directory A létrehozott könyvtárba bemásolod az állományokat. Utána: Project (fül) –> Header Files (jobb egérgomb) Add Existing Item… mindegyik állományt így hozzáadod a könyvtárhoz. Használata: #include "Könyvtárnév/Állománynév"
Oké, akkor már világos mi a gond. Te még mpasmx-et használsz, de az már régi, nem támogatott. Amit én küldtem, az már az utódja, pic-as névre hallgat. Ezért nincs olyan opciód, ami nálam van. Két dolgot tehetsz. Átállsz az új pic-as-re vagy megkeresed a mpasmx dokumentációjában, hogy hogyan kell további include könyvtárakat megadni, és beírod az Additional options mezőbe. Valami ehhez hasonló lesz: -I..\subir vagy -Isubdir.
Érdekes, mert a leírás szerint (nem tudom, hogy arra a verzóra vonatkozik-e, amit használsz) tudja kezelni az útvonallal megadott include fájlt.
A hozzászólás módosítva: Ápr 9, 2023
Na jó! Az MPLAB X buggyant.
Működött a dolog a létrehozott mappával, de a mappát a törzskönyvtárban hozta létre, nem ott, ahol én akartam. Létrehoztam egy újabbat abban a mappában, ahol a főprogram van. Nem működik. Ha a programot is átteszem a törzykönyvtárba, nem működik. Ha a pogram egy almappában van, és simán csak létrehozok egy mappát a törzskönyvtárban, azon belűl újabb almappát, és azon belül e még két újabbat, és 4 mappa mélységbe teszem be a dolgaimat, és a meghívást sem teszem idézőjelbe, azaz így néz ki: #include Keptar/Karora/Spriteok/Honapok/Januar.asm , tökéletesen működik. Így aztán csak Ctrl+c Keptar/Karora/Spriteok/Honapok/ , majd Ctrl+v a többi elé oszt jóidő. A lényeg, hogy végre rendet tudtam tenni benne. Mégegyszer köszönet mindenkinek.
Szia! Ezt követtem el próbaként: (Meglevő projektbe beleírtam egy "end"-et, ami mögötte volt azt kitettem a "C" gyökerébe. Az "end" elé beírtam az include + elérési utat, és így működik. Próbaként a program elejére is beírtam, de akkor néhány oldal hibát adott...)
A hozzászólás módosítva: Ápr 10, 2023
mégis milyen hibát adott? Megadtad a kontroller típusát az include előtt?
Töltsd fel a hibákat egy állományban.
Félreértetted, a működő program egy részét kitettem egy külön file-ba. Ha az "#include....." ott volt ahonnan kivettem, akkor jó volt, de ha a program elejére tettem akkor nyomta a hibákat.
Ezt csak sonajkniz kolléga kérdése miatt követtem el!
Sziasztok!
Egy egészen elképesztő problémával találtam szembe magamat. A PIC18-as család egész komoly lehetőséget ad a RAM-ok indirekt kezelésére. 18F14k22-es, 18F26K22 és 18F46K22-es kontrollerekkel dolgoztam eddig. Mindegyik típus tökéletesen kezelte a ramokat az indirekt módok mindegyikén. Most viszont egy 18F14K50-essel szívok. Csak abban az egy esetben tudom indirekt írni, olvasni a ramokat, ha csoportosan teszem. Azaz ha a címzés után max néhány utasítássoron belűl újabb és újabb ramot írok-olvasok postinc, postdec utasításokkal. Ha csak egy ramot szeretnék írni, nem történik meg a beírás. Szimulátorban tökéletesen fut, de a valóságban nem. Mi lehet ennek az oka?
És ha ugyanazt a címet egymás után többször?
Igazi RAM-ra gondolsz vagy EEPROM sokszor írhatórészére (data eeprom)? Másik PIC-el is ezt csinálja? Órajel-változtatás (csökkentés)? Errata ír róla valamit?
A belső ramokat használom.
Ha beállítom pl a következőt: MOVLW 0x1 MOVWF FSR2H MOVLW 0x47 MOVWF FSR2L MOVLW .127 MOVWF INDF2 Akkor beírja. Akkor is beírja, ha POSTINC2-őt használok, és folyamatosan töltögetek fel. Akkor nem írja be, ha a címzés nem direkt beírású, hanem változó átadással történik. Tehát pl. egy szorzási művelet végén MOVFF PRODH,FSR2H De még úgy sem, hogy MOVF PRODH,W MOVWF FSR2H Még mielőtt visszakérdeznél, szimulátorban ellenőriztem az adatokat, és sehol nincs tartományon kívüli érték. Illetve a szimulátorban magukat az FSR regisztereket is nézem. Megfordult a fejemben, hogy esetleg a hardveres szorzó hibás a PIC-ben, de más részén a programnak szintén van szorzás, és az jó eredményt ad.
Tévedtem. Amit jó szorzási eredménynek véltem az többlépcsős összeadás.
Tehát nincs kizárva a hardveres szorzó hibálya.
Nézd végig az Errata doksiját, Hátha írnak valami hasznosat róla.
Engem sokszor szivatott a bankolás. Egyedül a MOVFF használ két abszolút címet, a többinél bankolás van, és mintha a bankok mérete nem lenne mindig fix, függene a PIC RAM mérettől.
Idézet: „Akkor nem írja be, ha a címzés nem direkt beírású, hanem változó átadással történik. Tehát pl. egy szorzási művelet végén MOVFF PRODH,FSR2H De még úgy sem, hogy MOVF PRODH,W MOVWF FSR2H” Az utolsó sorban nem INDF2 -nek vagy POSTINC2 -nek kellene szerepelnie?
Az csak egy példa voltaz FSR írására.
Föntebb ez is szerepel. MOVLW .127 MOVWF INDF2
Zavart érzek az erőben...
Idézet: „Csak abban az egy esetben tudom indirekt írni, olvasni a ramokat...” A movwf FSR2H utasítás nem indirekten írja a RAM -ot.
Nem! Az címzi. Írni az INDF írja.
MOVLW 0x1 MOVWF FSR2H MOVLW 0x47 MOVWF FSR2L MOVLW .127 MOVWF INDF2 Bővebben: Link
Na ilyen az, amikor az embernek van egy alap elképzelése egy hiba mikéntjéről és 4 napon át csak ott kutakodik.
Az alap az volt, hogy a program kivesz a ramtárból 1 byteot, módosít rajta, majd visszateszi. Nos mint ennyi gyötrődés után kiderült, a program szépen kivette a megfelelő byteot a ramtárból, majd vissza is tette, csak az a rutin nem csinált vele semmit, aminek módosítania kellett volna.
Sziasztok!
Tud valaki esetleg olyan fejlesztőkörnyezetet, amiben a PIC18F05Q40 assemblyben programozható? Egyszerűen röhelyesnek tartom, hogy a Microchip az adatlapban feltünteti az összes assembly utasítást, de az általuk készített fejlesztőkörnyezet, amiben ez a PIC egyáltalán szerepel,(MPLAB X 5.35- től felfele) egyáltalán nem tartalmaz hozzá semmit. Utólag lehet letölteni, de csak XC8-at. Ja a 6-os verziótol felfele már semmit nem lehet asm.-ben programozni.
Az XC8 részévé tették az assembly programozáshoz szükséges dolgokat is. Bővebben: Link
ASM forrást készíteni úgy tudsz, ahogy a képen is látod, source files jobb klikk -> new -> pic_8b_asm_func.asm
|
Bejelentkezés
Hirdetés |