|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2024 11 29, 11:34. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » AVR šokimas - PC + k
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 09 27, 22:58 |
|
|
|
Žodžiu, reikia su AVR kažkokiu būdu peršokti tam tikrą instrukcijų skaičių, kuris yra nežinomas (kintamasis). Tokią funkciją atlieka RJMP, bet ji dirba tik tiesiai iš FLASH, t.y. šuolis turi būti determinuotas iš anksto.
Kaip tai padaryti? Rašau assembleriu. |
|
|
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 09 28, 00:09 |
|
|
|
nu visuose RISC PC registras turetu buti lygiavertis kitiems nors gal avr tas ir nedirbs, nes jis nera pilnai RISC
siap tai as C kalba panasu dalyka naudoju vietoje switch-case nes tada visur gaunamas vienodas uzdelsimas kitaip nei ta pati darant nuosekliai.
tada dar galima naudoti IJMP prisumuoti prie PC tiesiogiai nepavyks, bet galima ta padaryti per 2-3 komandas.
atrodo daroma sitaip is C kalbos toks dalykas kompiliuojasi taip
gana nemazai sudeda tu komandu, reikes bandyti asambleriu optimizuoti
(*pp[state][phase])();
RCALL __SAVELOCR2
; phase -> Y+3
; state -> Y+2
; H -> R16
; L -> R17
LDD R30,Y+2
LDI R26,LOW(6)
RCALL __MULB12U
SUBI R30,-LOW(_pp)
MOV R26,R30
LDD R30,Y+3
LSL R30
ADD R26,R30
LD R30,X+
LD R31,X+
ICALL arba IJMP |
|
|
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 09 28, 08:33 |
|
|
|
// reg5 - registre turime kažkokį skaičių SK, nuo kurio priklausys
// programos veikimas:
mov r16, reg5
clr r17
ldi ZL, low(case_table)
ldi ZH, high(case_table)
add ZL, r16 // <----- Štai ta vieta.
adc ZH, r17
icall
reti
case_table:
rjmp SK_is_1
rjmp SK_is_2
rjmp SK_is_3
rjmp SK_is_4
rjmp SK_is_5
rjmp SK_is_6
rjmp SK_is_7
rjmp SK_is_8
.............// ir t.t. tiek, kiek reikia skaičių
SK_is_1: nop
SK_is_2: nop //
.......
Mano relių bloke panaudotas šitas kodas, veikia senai ir gerai. |
|
|
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 09 28, 11:13 |
|
|
|
oni rašo: |
// reg5 - registre turime kažkokį skaičių SK, nuo kurio priklausys
// programos veikimas:
mov r16, reg5
clr r17
ldi ZL, low(case_table)
ldi ZH, high(case_table)
add ZL, r16 // <----- Štai ta vieta.
adc ZH, r17
icall
reti
case_table:
rjmp SK_is_1
rjmp SK_is_2
rjmp SK_is_3
rjmp SK_is_4
rjmp SK_is_5
rjmp SK_is_6
rjmp SK_is_7
rjmp SK_is_8
.............// ir t.t. tiek, kiek reikia skaičių
SK_is_1: nop
SK_is_2: nop //
.......
Mano relių bloke panaudotas šitas kodas, veikia senai ir gerai. |
Ačiū, kodas tikrai geras. Dabar prisiminiau, kad net kažkada kažką tokio naudojau.
Tik mažytė bėda: programa skirta ATtiny15, kuris neturi ICALL ir IJMP... Tai, spėju, nieko nebus? |
|
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 09 28, 12:50 |
|
|
|
jei nera Icall gali i steka padeti adresa ir daryti reti |
|
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 09 28, 14:38 |
|
|
|
Aha, tik bėda, kad nematau priėjimo prie stacko.. Kituose mikrovaldikliuose yra tam viešas registras. |
|
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 09 28, 15:25 |
|
|
|
atmegoje toks priejimas yra nes stekas laikomas bendroje atmintyje, ir C kalboje ten dedami kintamieji.
dabar paziurejau kad attiny15 tikrai teturi hardwarini steka |
|
|
|
|
|
Re: AVR šokimas - PC + k |
Parašytas: 2007 10 20, 17:20 |
|
|
|
circuit rašo: |
Žodžiu, reikia su AVR kažkokiu būdu peršokti tam tikrą instrukcijų skaičių, kuris yra nežinomas (kintamasis). Tokią funkciją atlieka RJMP, bet ji dirba tik tiesiai iš FLASH, t.y. šuolis turi būti determinuotas iš anksto.
Kaip tai padaryti? Rašau assembleriu. |
su tuo tiny15 galima daryti taip
cpi kintamasis, skaicius1
breq vieta_kur_sokti1
cpi kintamas, skaicius2
breq vieta_kur_sokti2
...
nors greičiausiai autorius rado gal ir kitą būdą |
|
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 10 20, 18:24 |
|
|
|
Bėda, kad neprirašysiu 200 eilučių šimtui situacijų.
Išsiverčiau truputėlį kitaip ir atsisakiau tokio šokinėjimo. |
|
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 10 20, 21:43 |
|
|
|
circuit rašo: |
Bėda, kad neprirašysiu 200 eilučių šimtui situacijų.
Išsiverčiau truputėlį kitaip ir atsisakiau tokio šokinėjimo. |
gal išduosi kaip? bet manau 100 eilučių vis tiek prireikė. |
|
|
|
|
|
AVR šokimas - PC + k |
Parašytas: 2007 10 21, 11:00 |
|
|
|
Tiesiog iš esmės perdariau programą, kad tokios lentelės iš vis nereikėtų. Bet taip išsisukti galima buvo tik labai konkrečiu mano atveju. |
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
|
|