 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
DejanLe Član

Pridružen-a: Pet 05 Nov 2010 15:10 Prispevkov: 11 Aktiv.: 0.06 Kraj: Poljčane
|
Objavljeno: Pet Nov 05, 2010 3:39 pm Naslov sporočila: ARM problem |
|
|
Pozdravljeni,
programiram samsungov S3C2440 ARM9. Za programiranje uporabljam uVision 4 in JTAG programator ULINK2. Sem čisti začetnik v ARM svetu in se še lovim z znanjem. Začel sem s programiranjem v asm in nadaljeval v c. Tukaj se pa je zataknilo.
Opazil sem, da pri programiranju ne morem uporabljat funkcijo v funkciji (če v main() kličem test() in v tej še test2() mi program zmrzne). Pri debugiranju sem opazil, da se mi naslov funkcije zgubi pri klicu druge funkcije.
Ker mi programi na začetki programiranje z c niso delovali sem moral v startup datoteki spremenit iz klica v __main v klic main. Če tega ne naredim, se mi v __main zazanka ker mi izbriše prve 4 lokacije pomnilnika. Predvidevam da je moj problem tukaj, ker ta funkcija pripravlja neke sklade.
Zdaj me pa zanima, če kdo pozna problem in njegovo rešitev?
Zanima me tudi, kako generira te funkcije, ker jih jaz nikjer v kodi nimam in jih ne morem spremenit.
Upam da kdo pozna rešitev, če pa potrebujete še več informacij pa mi javite kaj točno in bom posredoval.
Hvala za pomoč!
LP Dejan Lešnik |
|
Nazaj na vrh |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70647.26
|
Objavljeno: Pet Nov 05, 2010 3:43 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
DejanLe Član

Pridružen-a: Pet 05 Nov 2010 15:10 Prispevkov: 11 Aktiv.: 0.06 Kraj: Poljčane
|
Objavljeno: Pet Nov 05, 2010 4:15 pm Naslov sporočila: |
|
|
Hvala za hiter odgovor.
Spremeno sem USR_Stack_Size EQU 0x00001000
IMPORT __main
LDR R0, =__main
BX R0
in se mi program še vedno zazanka v
__scatterload_zeroinit:
0x0000011C E3B03000 MOVS R3,#0x00000000
0x00000120 E3B04000 MOVS R4,#0x00000000
0x00000124 E3B05000 MOVS R5,#0x00000000
0x00000128 E3B06000 MOVS R6,#0x00000000
0x0000012C E2522010 SUBS R2,R2,#0x00000010
0x00000130 28A10078 STMCSIA R1!,{R3-R6}
0x00000134 8AFFFFFC BHI 0x0000012C
0x00000138 E1B02E82 MOVS R2,R2,LSL #29
0x0000013C 28A10030 STMCSIA R1!,{R4-R5}
v vrstici ki je pobarvana modro mi spremeni register R1 na vrednost 0. Vsakič ko se ta vrstica ponovi (ponavlja se dokler register R2 ne prečka 0). Zelena vrstica pa prve 4 lokacije v ROMu postavi na 0. Program se mi tako nikoli ne izvede.
Če pa __main spremenim v main pa mi prde v program R13(SP) je nastavljen na vrednost 0x30001060 in se zmanjša ko se vpišem v drugo funkcijo pri vračanju pa poveča. Venda ko se vračam iz test() vpiše v R14(LR) vrednost 0 in program vrne na začetek. Kot da je sklad prazen. |
|
Nazaj na vrh |
|
 |
DejanLe Član

Pridružen-a: Pet 05 Nov 2010 15:10 Prispevkov: 11 Aktiv.: 0.06 Kraj: Poljčane
|
Objavljeno: Pon Nov 08, 2010 9:50 am Naslov sporočila: |
|
|
Kot večina že verjetno ve, je ta del kode ki sem ga objavil za počiščenje sklada. Ker mi ni jasno zakaj koda vpliva na R1, če prav ga ne uporabljam v tej vrstici. Nato sem debug zagnal še v simulaciji, ki pa se pravilno izvede.
Zdaj me zanima, kako je to možno. Kako lahko SUBS R2,R2,#0x00000010 vpliva na register R1. Je možno, da imam napačne nastavitve pri programiranju? Te sem namreč nastavljal bol po občutki, ker nisem nikjer našel pravih.
LP Dejan |
|
Nazaj na vrh |
|
 |
DejanLe Član

Pridružen-a: Pet 05 Nov 2010 15:10 Prispevkov: 11 Aktiv.: 0.06 Kraj: Poljčane
|
Objavljeno: Pon Nov 08, 2010 12:50 pm Naslov sporočila: |
|
|
Ok, problem je bil v 3V bateriji ki je na plošči. Bila je prazna, zdaj sem jo zamenjal ni se koda pravilno izvaja. Vendar še vedno mi ne pride iz zanke. Nikdar mi ne izvede funkcije main(). |
|
Nazaj na vrh |
|
 |
DejanLe Član

Pridružen-a: Pet 05 Nov 2010 15:10 Prispevkov: 11 Aktiv.: 0.06 Kraj: Poljčane
|
Objavljeno: Pon Nov 08, 2010 2:30 pm Naslov sporočila: |
|
|
Problem sem rešil. Izkazalo se je, da nisem nastavil nastavitev procesorja. Tako mi RAM pomnilnik ni deloval, ker se ni osveževal. Problem sem rešil tako, da sem zakomentiral IF (:LNOT:(:DEF:NO_MC_SETUP)):LAND:(CLOCK_SETUP != 0) vrstico.
Te vrstice ne razumem, če kdo ve kaj pomeni mi lahko prosim razloži. Tega še je več v startup datoteki in sem ostale pustil. Vem da je to IF za compiler vendar ne vem kako in kje lahko NO_MC_SETUP in ostale spremenljivke definiram. |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.61 Kraj: Kranj - struževo
|
Objavljeno: Pon Nov 08, 2010 9:46 pm Naslov sporočila: |
|
|
Mogoče nisi imel izbranega pravilnega mikrokontrolerja ali si uporabljal napačen startup fajl? Mogoče je tudi kakšna nastavitev prevajalnika napačna?
Ponavadi se startup datotek ne spreminja... _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
DejanLe Član

Pridružen-a: Pet 05 Nov 2010 15:10 Prispevkov: 11 Aktiv.: 0.06 Kraj: Poljčane
|
Objavljeno: Sre Nov 10, 2010 3:22 pm Naslov sporočila: |
|
|
No če imam kaj takega narobe ne vem. Zdaj mi ta del deluje.
Opažam pa da mi deluje prepočasi. Po enačbi ki je v datasheetu sem nastavil frekvenco 524 MHz. Ko sem frekvenco želel poizkusit sem v ASM napisal en enostaven programček za generacijo pravokotnega signala. Ta signal je imel frekvenco samo 1,4 MHz koda pa je imela 3 vrstice, torej tri komande. Če še zvišam frekvenco ali spremenim preskaler mi ne deluje več. Takšna frekvenca mi je definitivno prepočasna zato bi prosil za pomoč še pri tem. |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.61 Kraj: Kranj - struževo
|
Objavljeno: Sre Nov 10, 2010 9:26 pm Naslov sporočila: |
|
|
DejanLe je napisal/a: |
nastavil frekvenco 524 MHz. |
pa še enega za rezervo:
Si prebral tudi prvi, drugi, tretji,... in zadnji del datasheeta? kolikšna je max frekvenca in na kakšni frekvenci dela IO vodilo? flash wait states je koliko? Samo ena enačba še ne pomeni, da bo zadeva res delovala.
Če bi rad višje frekvence, vzemi FPGA. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.03 Kraj: Novo mesto
|
Objavljeno: Sre Nov 10, 2010 9:58 pm Naslov sporočila: |
|
|
Procesor dela do maksimalne frekvence 400 MHz.
Jaz dejansko sploh ne vem kaj bi napisal ob taki temi, ker se mi želodec obrača ko preberem kakšnih reči se nekateri lotevate popolnoma brez izkušenj in brez pomoči nekoga, ki procesor pozna. Saj periferija je luštkana in izgleda enostavna, ampak sam procesor je pa dejansko najtežje spravit do main-a, kar si že ugotovil. Najdi kak board support package (BSP) za development board ki si ga lastiš, tudi linux porti obstajajo, morda ti to kaj pomaga.
Enolične in enostavne rešitve tvojih težav ni, zato se tudi v tej temi pogovarjaš sam s sabo, ker je zelo težko kaj pomagat. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 7 dni
Powered by phpBB © 2001, 2005 phpBB Group
|