Pomoć oko zadatka u asembleru [ARM]

poruka: 11
|
čitano: 7.048
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
neaktivan
offline
Pomoć oko zadatka u asembleru [ARM]

Imam zadatak koji trebam uraditi u asembleru (kao sto se iz naslova vidi u pitanju je ARM asembler).

Dio koji ne uspjevam rijesiti je:
"Potrebno je blok 32-bitnih podataka u memorij postaviti od adrese 0x4000 pa na dalje, sve do određenoga podatka koji oznacava kraj bloka."
Postavim 32-bitne podatke u rijeci (.word) u labelu nazvanu npr. podatci:

 

podatci:
    .word 0x4AD86B17, 0x4DA95B24, 0xA42C59A3, 0xDDDDDDDD, 0

 

Ali nikako ne mogu dokuciti kako da "naredim" toj labeli da se ona u memoriju spremi od adrese 0x4000, a ne od neke adrese koju "dobije slucajno".

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Pomoć oko zadatka u asembleru [ARM]

Pretpostavljam kako je ovo GNU assembler (zbog ovog .word). Nisam radio s njim, no mehanizam čitanja i pisanja po memoriji je neovisan o toolchainu, dok su ovakve labele specifične .

 

Za rad s labelama moraš pogledati dokumentaciji onoga što već koristiš. Ako je to GNU ASM, tada googletu treba reći "GNU ARM ASM".

 

 

Za rad s memorijom pogledaj ovo:

 

http://www.toves.org/books/arm/

 

Točka 3 je ono što te zanima.

 

Nećeš raditi direktno s "memorijom", nego ćeš koristiti slobodne registre (obično neki R0 do R7). Dakle, učitaš podatak u registar i zatim ga spremiš na memorijsku lokaciju koju si prethodno upisao u neki drugi registar. Zatim inkrementiraš adresu lokacije (odnosno sadržaj registra u kojem je spremljena adresa), pa opet ispočetka, sve dok ne naiđeš na što već označava kraj.

 

 

Poruka je uređivana zadnji put uto 20.11.2012 19:37 (Djuro von Prekoplotovich).
11 godina
neaktivan
offline
Pomoc Asembler

Pozdrav, ucim programiranje mikrokontrolera. Naso sam neku skriptu i ukucao primjer u MPLAB, ali mi izbacuje neke greske. Moze li mi neko reci sta ne valja u kodu.

ovo je kod

 

;**********************************************************************
; Autor: Metilj
; Datum: 24.03.2014.
; Verzija: 6.6
;
; Opis hardvera: RC oscilator, LED od pina RA2 prema masi
; Opis softvera: Ovim softverom se ostvaruje treptanje diode sa periodom 0,2 S
; Potrebni fajlovi: p16F84.inc
;
;**********************************************************************
;***** Inicijalizacija asemblera*****
     list    p=16F84                                 ;Definiše upotrebljeni mikrokontroler
     #include <p16F84.inc>                                ; Ubacuje nazive registra u program
     _CONFIG   _CP_OFF & _WTD_OFF & _PWRTE_ON & _RC_OS    ; Podešava konfiguracione bite
;***** Imenovanje registra*****
BROJAC1 equ 0x0C                                     ; Prvi brojac za praznu petlju. Inicijalno 0xFF
BROJAC2 equ 0x0D                                     ; Drugi brojac za praznu petlju. Inicijalno 0xFF
;***** Podešavanje porta*****
     org 0x00                                        ; Definiše start programa
     bsf STATUS, RP0                                 ; Prebacuje program u BANK1
     movlw b'00000000'                               ; Postavlja sve ponive kao izlazne
     movwf TRISA
     movwf TRISB
     bcf STATUS, RP0                                 ; Vraca program u BANK0
;***** Ukljuci LED*****
Poc  movlw b'00000100'                               ; Ukljuci LED stavljajuci binarni broj 00000100
     movwf PORTA                                     ; u W registar a azatim u port A
;***** Prva petlja aktivna pri ukljucenoj LED oko 0,2S*****
Pet1 decfsz BROJAC1,F                                ; Smanji BROJAC1 za 1
     goto Pet1                                       ; Ukoliko je BROJAC1 jednak 0 nastavi dalje, u suprotnom se vrati na Poc1
     decfsz BROJAC2,F                                ; Smanji BROJAC2 za 1
     goto Pet1                                       ; Ukoliko je BROJAC2 jednak 0 nastavi dalje, u suprotnom se vratio na Poc1
                                                     ; Ovaj brojac broji od 255 do 0, sa taktom od 1 Hz
;*****Kašnjenje završeno. Sada iskljuci LED*****
    movlw b'00000000'                                ; Iskluci LED stavljajuci 00000000 u W registar
    movwf PORTA                                      ; a zatim u PORTA
;***** Druga petlja aktivna. Pri iskljucenoj LED*****
Pet2  decfsz BROJAC1,F                               ; Smanji BROJAC1 za 1
      goto Pet2                                      ; Ukoliko je BROJAC1 jednak 0 nastavi dalje, u suprotnom se vrati na Poc2
      decfsz BROJAC2,F                               ; Smanji BROJAC2 za 1
      goto Pet2                                      ; Ukoliko je BROJAC2 jednak 0 nastavi dalje, u suprotnom se vrati na Poc2
;***** Vracanje na pocetak programa*****
     goto Poc
;***** Kraj programa*****
     end

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Pomoc Asembler

neku skriptu (skriptu, rly? :D), neke greške...

Tako se assembly ne uči.

 

A stvar se još više komplicira što imaš hrpe raznih assemblera za hrpe raznih procesora.

To understand what recursion is, you must first understand recursion.
11 godina
neaktivan
offline
Re: Pomoc Asembler

Poceo sam sa PIC 16 F 84, uzeo skriptu i prepisao kod, ovo su greske koje mi je javio

 

 

Warning[205] C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 12 : Found directive in column 1. (list)
Error[122]   C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 14 : Illegal opcode (_CP_OFF)
Message[302] C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 22 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 23 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Warning[205] C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 45 : Found directive in column 1. (end)

 

 

 

15 godina
neaktivan
offline
Re: Pomoc Asembler

Malo googlanja...

 

metilj kaže...

Warning[205] C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 12 : Found directive in column 1. (list)
Warning[205] C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 45 : Found directive in column 1. (end)

https://forum.allaboutcircuits.com/showthread.php?t=4059

 

metilj kaže...
Error[122]   C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 14 : Illegal opcode (_CP_OFF)

http://www.edaboard.com/thread24544.html

 

metilj kaže...
Message[302] C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 22 : Register in operand not in bank 0.  Ensure that bank bits are correct.

Message[302] C:\MOJI PROGRAMI\PROBA\ZAGL.ASM 23 : Register in operand not in bank 0.  Ensure that bank bits are correct.

http://www.piclist.com/techref/microchip/mplab/msg302.htm

 

U biti koliko vidim od svih tih poruka samo je jedna zapravo greška, ostale su kojekakva upozorenja. Ne mogu ti više pomoći, prvi puta čujem i za taj assembler i za taj čip. Nađi nekakvu dokumentaciju i pažljivo ju analiziraj. Kada radiš s takvim stvarima dokumentacija ti je sve, ne možeš se oslanjati na pomoć drugih jer se radi o nečemu prilično egzotičnom.

To understand what recursion is, you must first understand recursion.
11 godina
neaktivan
offline
Pomoć oko zadatka u asembleru [ARM]

ok hvala

 
0 0 hvala 0
13 godina
neaktivan
offline
Pomoć oko zadatka u asembleru [ARM]

Tema je bila za ARM assembler i stara više od godinu dana.

Također nisi napisao koji asm korisitš (MPLAB ili nešto drugo).

Nisam vidovit, niti je itko na ovome forumu.

 

Na prvi pogled, imaš grešku u _CONFIG direktivi.

http://ww1.microchip.com/downloads/en/DeviceDoc/31027a.pdf

 

S PIC-evima nisam radio godinama, pa ti sada iz glave ne mogu reći je li što drugo pogrešno.

 

Nije uzrok greške, no ostale direktive (list) također piši VELIKIM SLOVIMA.

 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Pomoć oko zadatka u asembleru [ARM]

u pitanju je PIC 16 F84

koristim MPLAB verzija 6.6

hocu da postavim LED na izlaz RA2 da se pali i gasi u intervalima po 0,2 sekunde

11 godina
neaktivan
offline
Re: Pomoć oko zadatka u asembleru [ARM]

Ponovio postupak popravio "list" u "LIST" i opet :-(

 

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files\MPLAB IDE\MCHIP_Tools\mpasmwin.exe" /q /p16F84 "Zagl.asm" /l"Zagl.lst" /e"Zagl.err"
Error[108]   C:\MOJI PROGRAMI\ZAGL.ASM 14 : Illegal character (&)
Message[302] C:\MOJI PROGRAMI\ZAGL.ASM 22 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:\MOJI PROGRAMI\ZAGL.ASM 23 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Halting build on first failure as requested.
BUILD FAILED: Wed Mar 26 20:25:39 2014

11 godina
neaktivan
offline
Pomoć oko zadatka u asembleru [ARM]

Jeli netko može riješiti ova dva zadatka:

 

Napisati u asembleru:

 

---------------
int i, j, rez;
rez=i-j-20;

---------------
 int i, j, rez;
rez=i+j-20;
if(rez<10)
rez=10;

---------------

 

Hvala svima na bilo kakvoj pomoći.

Moj PC  
0 4 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice