Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dibagiranje softvera mikrokontrolera integerisanim dibagerom

[es] :: Elektronika :: Mikrokontroleri :: Dibagiranje softvera mikrokontrolera integerisanim dibagerom

Strane: 1 2

[ Pregleda: 5986 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Dibagiranje softvera mikrokontrolera integerisanim dibagerom16.01.2009. u 18:03 - pre 185 meseci
Interesuje me kakva su iskustva onih koji koriste ICD kod PIC-a i JTAG kod AVR-a za dibagiranje softvera.
Kako vase razvojno okruzanje podrzava ovaj nacin dibagiranja i koliko je on logican i lak.

Moje iskustvo sa CodeWarrior-om je da je podrska dobra ali prilicno sirova i zahteva poznavanje integrisanog dibagera, sto nije pohvalno.

Pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom17.01.2009. u 20:27 - pre 185 meseci
Debagiranje mi je jedna od najzanimljivijih stvari u ovoj bransi. Uvijek se odusevljavam kad vidim kako se sve ljudi dovijaju da bi debagirali softver/hardver (mislim naravno na one slucajeve kada nije dostupna skupa standardna oprema (osciloskopi, ICE, Logic Analyzer-i...) . Ova problematika je toliko interesantna da bi trebala da postoji posebna kategorija za to na ovom podforumu.

Moj prvi debuger koji sam sam napravio (a jos je u zivotu) sam krstio imenom "24-kanalni 25Hz vizuelni debuger "! To nije nista drugo do 24 diode u kombinaciji sa hex-invertorima. Kad je na nekom pinu visok nivo diodica svjetli, a inace ne! Diode su spojene preko invertora da se ne bi strujno opterecivali pinovi mikrokontrolera (ili cega drugog). Onih 25 Hz potice od toga sto sam vjerovao da se golim okom moze uociti treperenje do te frekvencije :), iako se ne moze bas toliko brzo brojati u sekundi :). Imalo je tu posla da se lemi citav dan posto sam radio na onim raster-plocicama, a medjusobne veze izvodio prelemljivanjem zicica...

Sto se tice navedenih debugera, kod uC koje koristim je to redovno JTAG, a kod Ti-ja pored njega ima i SpyByWire (samo dva pina). Mogucnosti su standardne (stani, kreni, korak po korak, breakpointovi, uvid u stanje svih registara i memorije u svakom trenutku i sl.), i u IAR-u su uradjeni ok. Korisno najvise za debagiranje softvera, a ako se u kolu nalazi i nesto drugo sto nije taktovano taktom sa uC-a onda slabo pomaze.

Nazalost ne koristim ni PIC ni AVR, pa nemam sta o njihovim debagerima ovdje da dodam, ali nadam se ni da ovo gore nece biti na smetnji.

Pozdrav.



 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom18.01.2009. u 05:24 - pre 185 meseci
za PIC od in circuit debugera imam mikroelektronikin easypic4 i microchipov pickit2 (original i par klonova poput junebug-a koji je odlicna alatka) ...
mikroelektronikin alat je ok ali je hw kompatibilan samo sa mikroe kompajlerom tako da sam prestao da ga koristim, rad je vrlo jednostavan i udoban, totalno intuitivan .. no zbog zatvorenosti mikroe alata, to sad skuplja prasinu na mojoj polici

pickit2 se vezuje za mplab koji je vise manje standard za PIC i svi alati se generalno koriste kroz mplab, debagiranje je vrlo jednostavno i lako ... projekat koji na primer ima delove pisane u asm-u i delove pisane u c-u, bez problema debagiram... postoje neki hw limiti u broju breakpointova, razlike u brzini izmedju razlicitih alata, ali sve u svemu rad je vrlo udoban i beskrajno jednostavan.... pickit2 podrzava ICD2 koji je potpuno koristan, upotrebljiv, lak za koristenje ... postoji i ICD3 koji vecinu stvari odradjuje u internom FPGA-u tako da je dosta brzi .. (naravno i malo skuplji ...) .. alat je identican i za ICD2 i za ICD3

za TI MSP430 trenutno trosim OLIMEX JTAG-ISO + eclipse + mspgcc i moram reci da je dosta sporije i neudobnije nego pic + mplab (no, ovde se mora uzeti u obzir da mozda nesto nisam namestio kako treba u eclipse+mspgcc kombinaciji) ... isti taj programer/debugger u kombinaciji sa IAR kompajlerom (c, c++, asm) radi 1/1

AVR nikad nisam debagirao...
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom18.01.2009. u 13:37 - pre 185 meseci
Odlicno, vec poceh da gubim nadu da ce se neko javiti.

Ranije sam se i ja dovijao kao Odin D. Kada sam zeleo da vidim vrednost neke varijable (ukljucujuci i registre) u nekoj tacki programa, ja sam te vrednosti vracao preko SCI na PC i tamo ih pratio kako se menjaju.

Sada u MCU imam integrisan dibager, i imam nedefinisanu predstavu kako bi on bio predstavljen u razvojnom okruzenju koje zavrsavam, a da to bude sto lakse za upotrebu. Narociti me interesuje dibagiranje dok se program izvrsava. Tacke prekida, zaustavljaju program (sto je mana u nekim slucajevima). Korak po korak je koristan za otkrivanje nekih gresaka kada se ona locira u nekoj proceduri ili manjem delu programa, ali najvise me interesuje dibagiranje dok MCU normalno radi. To bi bila neka vrsta nadgledanja izvrsenja programa. Pri tome bi hteo da se vide vrednosti globalnih varijabli (one lokalne traju samo dok se izvrsava procedura), toka programa: granjanja i slicno kao i aktiviranje interrupt procedura. Bio bih zadovoljan i tackom prekida koja se aktivira ako se zadovolji neki uslov, na primer uocio sam gresku, postavim prekidnu tacku i uslov da se aktivira samo za slucaj kada program uradi ono sto ne treba.

Za ove probleme nije vazno koji je MCU u pitanju, a kako vi radite vec sa integrisanim dibagerom mnogo bi mi pomoglo vase iskustvo u radu sa njim.

Pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom18.01.2009. u 15:15 - pre 185 meseci
Najbolji nacin za dibagiranje je ICE (In Circuit Emulator). Nazalost to je i najskuplja varijanta koja postoji. To je neki eksterni procesor (najcesce PC racunar) koji se preko odgovarajuceg konektora prikljucuje tamo gdje bi trebao biti mikrokontroler, te umjesto pravog mikrokontrolera PC simulira njega u realnom vremenu.. Radi u realnom vremenu, loguje sve moguce podatke i moze da se upravlja kako god hocemo (ukljucujuci i poduzimanje raznih akcija u zavistnosti od raznih uslova). Cijene su obicno par hiljada za jednostavnije mikrokontrolere, pa do vise hiljada za ozbiljnije.
Kad bi to napravio, to bi bila prava stvar. Sa danasnjim brzinama procesora od 2-3 Ghz mozda ne bi bilo nemoguce u kucnim uslovima sklepati neki da moze da simulira mikrokontroler na par desetina MHz.

Nazalost JTAG se ne moze koristiti za rad u realnom vremenu. Kad zaustavis mikrokontroler mozes u tom zaustavljenom stanju ocitati stanje procesora, pinova itd., pa cak i mijenjati vrednosti u registrimia itd... Ali za sve to vreme procesor stoji. Pa ga opet pustis da ide, pa ga zaustavis, ocitas i tako u krug. Kao sto rekoh, slabo pomaze ako tvoj uC komunicira sa necim drugim sto ne mozes da nadgledas sa JTAG-om. Neki proizvodjaci prave svoje komponente tako da mogu da se "ulancaju" u JTAG, pa recimo mozes JTAG-om pratiti stanje svih cipova u uredjaju ako si ga sastavio od takvih komponenti i medjusobno povezao na JTAG.

Sledeci znatno jeftiniji (ali i po mogucnostima skromniji) nacin od ICE je visekanalni Logic Analyzer i sad se vec za oko 300-tinjak evra mogu naci USB bazirani koji sempluju 30-tak kanala na 500 MHz. Sonde se prikljucuju na pinove (ili bilo koje tacke u kolu) od interesa i snima se njihovo stanje te se podaci salju na PC radi grafickog prikaza i obrade. Neki od njih imaju i nekoliko analognih kanala. Trenutak pocetka snimanja moze se podesiti raznim kombinacijama uslova (npr. kad se transmit linija serijske veze spusti sa 1 na 0, i ako je tamo neki bit na 1, onda pocni snimanje, a zaustavi kad se desi nesto drugo itd...)

Evo recimo kako to izgleda:
http://www.pctestinstruments.com/
http://www.ecvv.com/product/vp...MHz-logic-analyzer-LA5034.html

Ovdje ima par "open design" projekata za one koji su zainteresovani sami da rade:
http://www.mikrocontroller.net/articles/Logic_Analyzer

I jedan clanak star par godina, ali jos uvijek koistan:
http://www.ganssle.com/microscopes.pdf

I naravno, neprevazidjeni, za ovu priliku iskopan, 24-kanalni 25Hz vizelni debuger:



[Ovu poruku je menjao Odin D. dana 18.01.2009. u 16:25 GMT+1]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom18.01.2009. u 23:03 - pre 185 meseci

sto se logic analyser-a tice, http://www.saleae.com/logic/ je najbolje sto sam ja video do sada, nije fora samo u hardware-u, posto sam hw nije neki veliki problem napraviti, veci problem je sw za interpretaciju podataka a "logic" software radi interpretaciju seriskog, spi, i2c ... + moze da mu se lako doda interpretacija bilo kog novog protokola .. - odlicna sprava 150$
inace hw za analyzer prilicno jednostavno moze da se napravi sa externim oscilatorom, programabilnim deliocem freq, sramom i bilo kojim usb enabled uC-om... frekvencija semplovanja je limitirana samo brzinom sram-a (50-70ns)


sa ICE se nisam previse igrao (nemam kod sebe) ali ono sto sam probao je "keva" .. dakle mnoooooooooogo je brzi od ICD-a i ima vise mogucnosti fora je sto on radi emulaciju uC-a u fpga (ili vec necem slicnom) razlika je samo u tome sto je ovaj "ozbiljno skuplji"

sto se ICD-a tice, bar kod PIC-a (pickit2 icd na primer), debaggiranje je vise manje isto kao i da debagiras desktop aplikaciju .. nema mnogo razlike ..

vidim da ti hoces to da dodas u svoj ide koji pravis .. sta je stos ..

1. treba da omogucis korisniku da definise BP u kodu (onoliko njih koliko ICD dozvoljava, uglavnom je to 3, pritom, ako koristis step by step i slicno 1 moras da cuvas za to)
2. treba da imas kontrolu
- start
- pause
- step in
- step out
- step over
- animate

to ti je "minimum minimuma" ... da bi sve to imalo i nekog smisla treba ti
3. watch (dodas varijable ili memorijske lokacije koje hoces da pratis i definises nacin prikaza (int, float, char, string, array ...))
4. RAM inspector
5. ROM inspector
6. mogucnost da direktno promenis vrednost na memorijskoj lokaciji
7. mogucnost da direktno promenis vrednost nekog registra

to mu dodje to ... 6 i 7 nisu podrzani na primer svim alatima na svim uC-ovima ..

e sad, kako ti koristis to verovatno samo za "korak assembler" onda nemas problem sa preskakanjem kroz razlicite source fajlove gde koriste razlicite jezike, ali svejedno moras da imas prikaz "pravog asm-a" i "source koda" kada radis step by step ..
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom18.01.2009. u 23:11 - pre 185 meseci
da dodam nesto vezano za mplab ... ne znam da li si nekad koristio isti ide koji daje (dzaba) microchip ali generalno ti u njemu pises kod (odaberes koji toolchain koristis - tj koji kompajler, tako da iz njega pises i u asm-u i u c++ i u c i u pascalu ...) ... iz njega mozes onda da "programiras" u chip ili da "debugiras" ... i biras "koji alat ces za to da koristis" ..

za debug pored nekoliko hw alata (icd / ice) za debagiranje mplab ti nudi i
- software emulation

gde mplab radi sw simulaciju uC-a i izvrsava kod nad njim, daje ti sve mogucnosti debagiranja (pauze, step by step, inventory ...) i pritom moze da ti meri razne tajminge (izmedju nekih eventova npr) .. problem je sto tu nema interakcije sa "ostalim elementima u sklopu" tako da ne mozes da testiras da li ti komunikacija sa i2c rtc-om radi kako treba posto taj simulator ne ume da simulira i2c rtc :(

dodatno, mplab nudi demo verziju proteus ISIS-a koji omogucava vizuelno debagiranje sa dodatnim komponentama, dakle, moze da se napravi full shema sa usb stekerom, i2c rtc-om, tasterima, ledarama, stepper motorima, seriskim terminalom, lcd-om .... ..... i ti iz mplab-a radis step by step (ili vec kako hoces ides kroz program sa animate ili sa break pointima) a imas kompletnu interakciju uC-a sa okolinom (koju simulira ISIS)
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom19.01.2009. u 00:30 - pre 185 meseci
Taj Logic Analyzer na http://www.saleae.com/logic/ jeste "fancy", ali sa 8 kanala i brzionom od 24 MHz slaba korist od tih fancy dodataka. Zgodno za nadgledanje jednostavnijih stvarcica kad znas sta je problem, ali kad ne znas u kom grmu cuci zec onda ti obicno treba i vise kanala i znatno veca brzina, barem je kod mene tako...
Inace nije problem napraviti hardver za brzine od par desetina MHz, ali za 500 Mhz nije bas ni trivijalno.

Ove karakteristike sto je Bogdan pobrojao su uglavnom to sto bi svaki debuger trebao da ima, ali iz samog nabrajanja tesko mozes vidjeti konkretne detalje tako da je najbolje da skines neku probnu verziju nekog kompajlera pa vidis kako to izgleda. Ja mogu da ti predlozim IAR Embedded Workbench jer ima sasvim dobar debuger, a ima i simulator (za MSP430 npr.) tako da mozes direktno isprobati debager u simulaciji, ne treba ti nikakav hardver. I help je odradjen sasvim OK tako da dosta "fazona" mozes i iz njega da pokupis. Njegov debuger/simulator ima upravo ono sto si spominjao - simulaciju interupta i raznih drugih zbivanja kao i detekciju raznoraznih uslova. Moze da mijenja sadrzaje registara u procesoru i memoriji u toku debagiranja. Neki debageri omogucuju i da se u toku debagiranja mijenja i izvorni kod, ali ovaj ne: kod se moze promjeniti u toku debagiranja ali ce se promjena odraziti tek nakon ponovnog kompajliranja projekta.
Ima tu dosta posla da se to sve uradi, a struktura svega izgleda kao na slici ispod. Ako koristis neke svoje JTAG emulatore onda treba da pises posebne drajvere za svaki, sto nije bas najsretnije rjesenje. Bolje je da imas neki standardni prihvacen od sirokih narodnih masa pa da tvoj debuger podrzava njega jer je moguce da nadjes vec gotov drajver za njega.

Prikačeni fajlovi
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom19.01.2009. u 13:00 - pre 185 meseci
Zahvalan sam vam na ovako iscrpnim informacijama. Ne laskam vam, ali bez vas i mozda jos nekog ovaj podforum bi izgubio svoj smisao.

Zasto u ovom trenutku insistiram na dibagiranju u realnom vremenu? Zato jer bas sada pisem softver za kontrilu jedne slozene masine. Napravio sam simulator masine (jer ona ne bi mogla da stane u prostoriji gde radim) delom sa mikroracunarom, a delom sa elektromehanickim komponentama. Idealno bi bilo da kada postavim prekidnu tacku da zaustavim i simulator. To nije moguce, mogao bih da zaustavim mikroracunarski deo simulatora, ali ne i elektromehanicki. Naime, MCU je stao u prekidnoj tacki, a proces koji treba da kontrolisem nastavlja da se odvija.

U mom MCU-u postoji jos jedan kontroler BDC (background debuger controler) koji ima sledece osobine:

1. Rad u aktivnom BD modu. Tada MCU stoji, i moze se pristupati svim lokacijama flash-a, RAM-a i registrima sa citanjem i upisom. Pristupa i CPU registrima. U ovom modu se vrsi i programiranje flash-a. Moze da izvrsava naredbu po naredbu i da pokrene kontinualno izvrsenje programa od vrednosti na koju je podesen programski brojac.

2. Kada se pokrene kontinualno izvrsenje (nenametljivi BD mod) programa onda je moguce citati i upisivati u memorijske lokacije i registre, ali ne i registre CPU-a. Koliko god izgledalo ovo korisno ima i veliku manu, zahtev za pristup memoriji dolazi kao zahtev od PC-a preko BDM linije sto je mnogo sporije od izvrsenja programa, pa ne znam kada se neka varijabla menja. Cak moze dvaputa da se promeni a da to ne bude registrovano. Ako postavim tacku prekida, MCU prelazi u aktivan BD mod i tada mogu da gledam svasta, a to mi je korisno samo ako sam pogodio gde da stavim tacku prekida. Osim ovoga ima dva 16-to bitna registra A i B. U A uvek ide adresa, a u B adresa ili podatak. Takodje ima i jedan FIFO 8x16bita. Sve ovo moze da se programira da radi na razne nacine. Jedan je na primer da kada se upise adresa u A (to zovu tag) i desi se triger (adresa se poklopi sa onom u A) onda pocinje da puni FIFO podacima koji mogu biti sa magistrale podataka ili adrese promene toka programa. Ovo moze biti u begin modu, kada FIFO pocinje da se puni sa trigerom, ili end modu kada FIFO prestaje da se puni kad se desi triger. Kada se napuni FIFO, moze se dozvoliti da MCU predje u aktivan BD mod ili da nastavi rad a da se preko BDM linije cita FIFO. Necu vas zamarati o drugim varijantama, vec o problemima: FIFO je mali i brzo se napuni, pa mi ne koristi mnogo. Osim toga ni podaci u njemu mi nisu mnogo korisni. Sve u svemu imam konfuziju u glavi kako bi ovo mogao korisno da upotrebim. Nadao sam se da neki drugi MCU-ovi imaju integrisan dibager u realnom vremenu i da odatle pohvatam neke fazone.

Inace ugradnja BDC-a je za moj ukus prilicno skupa. MCU na basu ima 20MHz, a CPU se klokuje sa 40MHz, sto znaci da bi bez BDC-a MCU radio duplo brze.

Osecam da su potrebne dosetke da bi se iskoristile osobine BDC-a za dobro dibagiranje u realnom vremenu. U ovakvim slucajevima kada se 'zafarbam u cose' najlakse dolazim do resenja kada o problemu diskutujem sa nekim, zasto je to tako ne znam, ali je tako.

Ako imate vremena da mi pomognete skinite sa ovog linka bilo koji MCU i pogledajte njegov opis BDM-a, mozda ce te dobiti neku ideju.

http://www.freescale.com/webap...nomy.jsp?nodeId=01624684491437

ako je to previse za vas hvala vam na dosadasnjoj pomoci.

Pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom19.01.2009. u 15:46 - pre 185 meseci
Nisam skinuo opis BCD sa tog linka, skinucu malo kasnije kad nadjem vremena, ali cu sad samo na brzinu da odgovorim ono sto mi sada pada na pamet, i sa onim sto dosad znam o tome.

BCD je nesto slicno kao JTAG kod mnogih drugih ili ICD kod PIC-a ili razne druge varijante kod drugih proizvodjaca, a razlikuju su medjusobno samo po nekim detaljima ili specificnostima, broju pinova pomocu kojih im se pristupa i naravno po imenu kako ih koji proizvodjac krsti. Vecina koristi JTAG jer mu to dodje kao neki standard.
U principu se sve zasniva na tome da se CPU zaustavi i da se onda ceprka i razgleda po njemu. A cim se pomene "zaustavljanje CPU-a", o realnom vremenu vise nema govora. Drugi je problem sto razni proizvodjaci iz marketinskih razloga tim pojmom nazivaju razne stvari, pa i to kad masina stoji. Pojedini proizvodjaci, u skladu sa svojim ocekivanjima ili nadanjima sta bi moglo biti projektantima korisno, nadogradjuju na tu osnovnu zamisao razne dodatke (poput toga sto si spomenuo npr. da pocne snimanje saobracaja na magistralama ako se detektuje upis na neku unapred oznacenu memorijsku lokaciju, neki rade sa FIFO memorijom, neki sa RING itd...). Nesto od tih ideja prezivi, a od necega se poslije par godina odustane zbog slabe vajde...

Sve u svemu, time moze dosta da se uradi ako je problem izolovan u softveru mikrokontrolera i ako ispravnost citavog uredjaja uglavnom ovisi o tom softveru, tj. ako je softver veoma labilno spregnut sa ostatkom sistema. Npr. ima neki uredjaj koji treba da dobije neku komandu od uC-a, a on je ne dobija. Onda je jasno da je problem u uC. Ti onda postavis breakpoint taman par taktova pred slanje te komande i onda korak po korak izvrsavas instrukciju po instrukciju i gledas kad ce u kojem registru da se pojavi problematicna vrednost zbog koje te boli glava...
Ali recimo ako uC i taj uredjaj razmjene 10 poruka ok, a onda 11-tu zabrljaju, ili 111-u onda nije tako jednostavno. Onda je moguce ne samo da uC brlja nego i taj uredjaj, a on ti je nedostupan preko JTAG-a, a problem dodatno povecava i to sto ne znas kad ce da zabrljaju i sto taj drugi uredjaj moze da radi samo u realnom modu, a nikako "step by step" itd...

Ako debagiranje vrsisi u sistemu u kojem osim mikrokontrolera i cipova koji rade po njegovom taktu ima i stvari koje se ne zaustavljaju kad se zaustavi mikrokontroler onda ovaj nacin debagiranja skoro da gubi na prakticnom znacaju. To je pogotovo izrazeno kad postoje i elektromehanicke komponente u sistemu, kao sto su razne masine.

Cesto problemi nastaju zbog elektricnih karakteristika vodova, parazitnih kapacitivnosti, vremenskih kasnjenja po linijama, EM smetnji, starosti komponenata i tome slicnih stvari. U tom slucaju ovaj nacin debagiranja moze biti od neke koristi jedino ako vec unapred imas neke sumnje gdje bi problem mogao biti pa se ogranicis samo na taj uski dio, pa jos uz pomoc nekih dotanih trikova ispitas situaciju. Ali i u tom slucaju najcesce se stigne samo do toga da se potvrdi da problem nije do softvera mikrokontrolera, a do cega je tacno - za to su potrebna druga ispitivanja.

Koliko ja znam, za sada ne postoji ni jedan mikrokontroler koji ima u sebi ugradjen debug sistem u realnom vremenu, tj. da loguje sve podatke dok mikrokontroler radi normalnom brzinom. Jedino ti to omogucuje ICE, a on je skup.

Drugi, jeftiniji put je Logic Analyzer i generalno zahvalniji za kucne (ne-industrijsku) potrebe, jer ga mozes koristiti za bilo koju platformu i na bilo kom sistemu, dok se ICE pravi samo za odredjeni uC i dostupni su ti samo signali sa pinova uC-a i vrednosti u njegovim registrima. Ako ti se u sistemu nalaze analogne komponente poput raznih masina, onda u tackama od interesa konvertuj napone i struje u digitalnu formu, i mozes da vrsis debagiranje u realnom vremenu pomocu Logic Analyzera i da logujes sve podatke na PC, pa ih kasnije analiziraj. Doduse, sad pomocu njega ne mozes da vidis sta se nalazi unutra u registrima mikrokontrolera, ali barem po onome sto se nalazi na pinovima mozes da znas da li uC radi kako je ocekivano ili ne.

Dakle moj zakljucak: ako debagiras softver uC onda ti JTAG, BCD, ICD... omogucavaju da ga debagiras na nacin kako se npr. debugira softver za PC, sve lici na to. Ako rad tog softvera istovremeno zavisi od ponasanja nekih spoljnih komponenti koje se ne zaustavljaju kad se zaustavi i uC - onda mrka kapa. Pomaze samo u nekim izolovanim slucajevima kada se uz jos poneki trik nesto da uhvatiti, ali u principu svaki takav problem zahtjeva neki svoj posebni trik, tako da nema generalnog pravila.

U tvom slucaju, posto kazes da ima i neka masina, odlucio bih se za Logic Analyzer koji osim potrebnog broja digitalnih ulaza ima i poneki analogni. Ne znam tacno sta te bas muci, ali navedena spravica bi trebala da pokrije 95% mogucih problema.

Pozdrav.
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom19.01.2009. u 18:30 - pre 185 meseci
U pravu si da ono sto integrisani dibageri pouzdano rade, da ustvari nije od velikog znacaja i da se sa malo vise paznje i bez njega moze resiti problem. Logicki analizator bi mi bio od pomoci samo kada bi mogao da ga nakacim na interu magistralu koja nije dostupna. Greska na izlaznim pinovima mi je vidljiva, ali trebam da nadjem njen uzrok.

MCU koji koristim ima dibager koji daje neke informacije dok MCU radi punom brzinom. Mogu da procitam bilo koju lokacijau RAM-a, registara ili flash-a (podrazumeva se da je MCU otkljucan) ili da u nju upisem novu vrednost. Problem je sto ne znam u kom trenutku, odnosno u kojoj tacki programa citam varijablu, a osim toga vreme izmedju dva citanja nije zanemarljivo (slanje komande za citanje jednog bajta i prijem tog bajta traje 40us), pa se mogu provuci neke promene varijable koje ne vidim. Postoji mehanizam koji je previse sazeto opisan, pa iako mi je jasno kako radi nemam jasnu ideju kako da ga korisno upotrebim.

Vec sam spomenuo da je takt na magistrali 20MHz, a takt CPU-a 40MHz. BDC ostvaruje svoju funkciju tako sto kontrolise CPU mikrokontrolera. Posto za jedan takt magistrale postoje 2 takta CPU-a, onda u jednom CPU izvrsava naredbu iz flash-a a u drugom nad njim ima kontrolu BDC. E sad, umesto da MCU radi na 40MHz (duplo brza) zbog tog BDC-a to nije moguce, a ja nemam ideju kako da ga pametno iskoristim.

Ako budes imao vremena i procitas ono sto je napisano o BDM-u, nadam se da ce me neka tvoja ideja pomeriti sa pocetne tacke.

Srdacan pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom19.01.2009. u 20:07 - pre 185 meseci
Citat:
korak: Greska na izlaznim pinovima mi je vidljiva, ali trebam da nadjem njen uzrok.


Upravo ovo ilustruje ono sto sam pricao gore. Prvo sto treba znati je od cega sve zavisi to sto se pojavljuje na pinovima. Da li vrednosti na tim pinovima zavise eventualno i od nekih ranijih ocitavanja koje je uC recimo pokupio sa nekog senzora ili ih je izracunao na osnovu nekih podataka koje mu je neki drugi cip poslao ili nesto trece.
Dalje je pitanje da li se te greske pojavljuju samo u pravom radu (realnom vremenu) ili i tokom simulacije/debugiranja?

Ako znas odgovore na ova pitanja onda mozes krenuti redom unatrag od tih problematicnih pinova (pinovi -> output registri -> funkcija koja je upisala vrednosti u output registre -> funkcija koja je izracunala sta treba da se upise -> vrednosti na osnovu kojih je obavljeno to izracunavanje -> ko je dostavio te vrednosti -> ko ih je ocitao -> ko ih je dogurao do ulaznih pinova -> ...itd...

Sad ispada da pricam trivijalne stvari, ali to sve navodim zbog toga sto u svakoj ovoj tacki taj BCD mozda moze da se iskoristi uz pomoc neke doskocice, ali se te doskocice sigurno razlikuju za svaku tu tacku.

Recimo prvi korak: Ti dakle znas kad se pojavi greska na izlaznim pinovima. Onda prepravi svoj softver tako da ako je moguce da se sav saobracaj na magistralama relevantan za ono sto ce se pojaviti na tim pinovima obavlja bas neposredno prije slanja na izlazne pinove. Na pocetku tih akcija stavi neki upis bilo cega na neku mem. lokaciju koja ce ti sluziti kao Tag i koja ce okinuti pocetak snimanja u FIFO. Neposredno iza instrukcije koja je poslala problematicne vrednosti na izlazni port stavi break point. Osim toga prepravi svoj program tako da i sve druge vrednosti koje igraju neku ulogu u svemu tome snimis prethodno u neki kutak memorije.
Kad se sva ta drama odigra imaces CPU zaustavljen neposredno poslije slanja problematicnih podataka. U FIFO ces imati sve sto se odigralo neposredno prije tog cina. Na svojim predvidjenim mjestima u memoriji imaces normalno sve vrednosti bitne za taj slucaj, a u onom udaljenom kutku u memoriji imaces netaknute prvobitne kopije svih tih vrednosti. I onda uporedjujes redom i gledas sta nije kako treba.
Ako vidis da su ispravne vrednosti upisane u izlazni registar onda je znaci problem van mikrokontrolera, ili ako vidis da su vec neispravni upisani u izlazni registar onda ispituj funkciju koja ih je upisala. Pa ako je i ta funkcija dobila neispravne podatke onda tempiraj sve oko onog dijela koda koji je to njoj proslijedio itd...

E sad, ako ti u principu ne znas kad ce da se javi ta greska, ali znas da prepoznas sta je greska, onda recimo povezes neki detektor na pinove (obican dekoder koji ce detektovati tu pogresnu kombinaciju i poslati interrupt mikrokontroleru). Zatim podesis FIFO da non stop snima, a break point postavis tacno na ulasku u prekidnu rutinu koja se pokrece ovim prekidom. Time ce CPU biti zaustavljen odmah poslije problematicnog trenutka, a u FIFO ces imati sta se neposredno prije toga odigravalo na magistralama. I onda u skladu sa onim prethodno recenim krenes u analizu.

Naravno, ovo pod pretpostavkom da sa FIFO od 8x16 bita imas dovoljno prostora da "obuhvatis" taj kriticni interval.

A ako nista od toga ne bi pomoglo, meni je sad npr. palo na pamet da koristis vise mikrokontrolera koji odjednom rade paralelno u istom kolu i jedan supervizorski koji ce da ih startuje sve istovremeno i da im daje ujednacen clock. Prvi podesis da snima FIFO od tacke A do B, drugi od B do C, treci od C do D....
Tako mozes prosiriti opseg tog snimanja, ali po cijenu znacajnih hardverskih vratolomija.

Ili ako je moguce da koncipiras svoj program tako da ne ovisi o tome sta se zbivalo ranije nego samo o trenutnim vrednostima na ulazu mikrokontrolera (recimo da sve varijable koje su ti bitne za rad programa ne drzis unutar mikrokontrolera nego na spoljnoj memoriji) onda mozes da imas dva mikrokontrolera paralelno od kojih uvijek jedan ocitavas dok onaj drugi radi, pa drugi ocitavas a prvi radi i tako u krug. Oba mikrokontrolera dijele tu zajednicku spoljnu memoriju tako da se obezbedjuje kontinuitet programa. U tom slucaju imas kontinualno logovanje u real-time modu. Isto zahtjeva petljancije sa hardverom i supervizorskim uC koji ce time da upravlja i da vrsi ocitavanja i snimanja tih podataka.
Ovo lako moze da se implementira ako ono okruzenje u kojem mikrokontroler radi nije narocito zahtjevno po brzini (sto obicno i jeste slucaj kad se radi o masinama). Onda koncipiras program tako da se ciklicno izvrsava jedna funkcija:

1) Ucitaj aktuelne vrednosti iz spoljne memorije
2) Obavi sta treba da se obavi
3) Snimi aktuelne vrednosti na spoljnu memoriju
4) Signaliziraj supervizorskom cipu da moze da zaustavi ovaj CPU i aktivira drugi

Dok je ovaj zaustavljen cita se njegov FIFO, pa se onda drugi zaustavi, a ovaj opet pokrene itd...

Moguce je da ova rjesenja nemogu imati nikakvu primjenu u tvom slucaju, ali navodim samo kao ilustraciju raznoraznih rjesenja, ali da bi se ova lupanja, iz kojih bi se mogla izroditi i neka primjenjivija ideja, konkretno usmjerila na tvoj slucaj trebalo bi nam nesto vise cinjenica.

Pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom19.01.2009. u 20:57 - pre 185 meseci
Pade mi u medjuvremenu na pamet:

Ti rece da ti se promjene u memoriji desavaju brze nego sto sa BDC-om mozes da ih pohvatas. Mozes li nesto da ucinis da ti CPU ne mora na podrazaje iz okoline da reaguje bas sa maksimalnom brzinom ili da program ne bude bas maksimalno "efikasan". U tom slucaju mogao bi izmedju sukcesivnih promjena u memoriji koje sada ne mozes da ispratis ubacis neku pauzu ili neki broj NOP instrukcija, tako da BDC ipak stigne da sve isprati?

Recimo da ti je situacija takva da na svakih 500us dobijes nesto spolja sto treba da se obradi. Obrada traje 10us, pa onda opet cekas 490us do sledece pobude. Onda u tom slucaju mozes da rastegnes obradu na 500us. Tada bi mogao BDC-om da ispratis promjene 10-tak varijabli, pod uslovom da se ni jedna ne mijenja cesce od jednom u 40us. Ako bi uspjeo tako da nadjes gresku, onda kasnije vratis na normalno.
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom19.01.2009. u 20:57 - pre 185 meseci
Nisam koristio integrisane dibagere, ali imam iskustva sa softverskim trazenjem hardverskih gresaka interfejsa.

Licno za sve programe koje pisem koristim softverske breakpointove sa skokom na isto tako softverski definisane vektore sopstvenih gresaka.

U njima blokiram dalji rad mikrokontrolera i preko izlaznog interfejsa posaljem kod greske.

Izlazni interfejs mi je skoro uvek ono sto je vec fizicki povezano na sistem. Ako je to displej prikazem E1 poruku pri nailasku prve greske, ili E15 pri nailasku petnaeste. Ukoliko je to biper, mikrokontroler otkuca kod greske morzeovom azbukom.

Jeste da ovakav nacin blokira mikrokontroler, ali prilikom dibagovanja hardvera koji ne sme stati, mogao bi se napraviti mali softverski kod preko koga bi se vrsilo snimanje pracenih registara u karakteristicnim tackama. Koliko vidim i korak je primenjivao isti princip ranije.


@Odin D
Svidja mi se opis vaseg dibagera. I sam imam nesto slicno, ali sramota me je da postavim sliku ovde. Vi ste bar koristii raster plocu, a ja poklopac sa kantice eurokrema!
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom19.01.2009. u 21:21 - pre 185 meseci
Citat:
Stojan Trifunovic: ... a ja poklopac sa kantice eurokrema!


Super!
Samo ti okaci neka vide ljudi sta je dovitljivost. A mozda ce da djeluje inspirativno i na @koraka.

Nego, kad vec pomenu ovaj tvoj nacin debagovanja, sasvim upotrebljiva ideja. Ako mikrokontroler ima dovoljno vremena za to, onda moze sam da loguje negdje sve podatke od interesa (moze da salje drugom nekom uC-u koji ce ih uredno snimati) u toku izvrsavanja, bolje mozda i to nego onako kako sam ja predlozio u prethodnom postu.
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.smin-1.sezampro.yu.



+8 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom19.01.2009. u 22:25 - pre 185 meseci
Pa u redu. Evo mog DRS-a (debilnog razvojnog sistema)!





[Ovu poruku je menjao Stojan Trifunovic dana 20.01.2009. u 10:04 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom20.01.2009. u 07:41 - pre 185 meseci
super sklop :) no kapiram da ne bi uzelo mnogo vise vremena da se baci na raster plocku :)

lm, sto se debagiranja tice, pre nego sam cuo za icd (te dobavio easypic4, pa pickit2 pa ...) dok sam jos koristio programmer koji pece uC-ove preko par porta koristio sam spi sram za debagiranje sta se desava na sistemu ... inicajalno sam posao sa i2c epromom pa sam odustao zbog brzine i napravio spi sram (pic + normalni parallelni sram sa spi interface-om i seriskim interfaceom za citanje sadrzaja) tako da u svakom "bitnom momentu" zapisem paket ... a dok glavni sistem radi (i loguje) sa "log" sistema seriskim portom mozes da pokupis "stanja" ... daleko od "idealnog" resenja ali radilo je posao... jos kada sam provalio da ako "izvadis kristal" uC stane i kad vrnes radi normalno ... da mozes sam da mi "klikas" taktove .. eeeeeeeee de mi je bio kraj :D ... napravio sam "takt generator" na onom "log sistemu" koji je na komandu sa seriskog porta klikao X taktova glavnom uC-u pa ga onda zaustavljao ... no .. sve je to razlemljeno i iskoristeno za druge projekte posto je ICD zamenio celu tu skalameriju ... easypic4 i dalje koristim (doduse bez njegovog icd-a koji nije mplab kompatibilan - steta, vec sam napravio na easypic4 interface za pickit2 :) ) posto ima 1/1 ledare za svaki pin, taster + pushup/pulldown za svaki pin etc etc ... neverovatno dobar razvojni alat po meni (imaju jos alata .. izasao je i easypic5 ako se dobro secam, ima i za bigpic i uni i ... ali nije sad o njima rec)

u svakom slucaju, pobegoh od teme, kombinacija sa "log" sistemom ako broj mem lokacija koji se prati nije prevelik i ako brzina nije presudna (a obicno nije) ume da bude jako korisna....

sto se tice logic analyzera ... meni 25MHz deluje dovoljno za ono zasta je la namenjen ... (za posmatranje protokola) posto ces retko koju komunikaciju imati na preko toga i 8 "linija" mi tu deluje savrseno dovoljno, za hobi vise nego dovoljno u svakom slucaju.. sad .. nije za debagiranje "izlaza" sa pic-a tu se slazem, ali kada su izlazi u pitanju, ja uvek navijam za osc pre nego za la posto 99% problema koje sam ja imao a nisam mogao da resim su bili 1/1 vidljivi osciloskopom ... e sad, neki 24 kanalni osciloskop ... mmmmmmmmmmmm to bi vec bilo iskusno :D

korak, nisam svatio jedan deo tvog pitanja ... da li ti imas problem da izdebagiras neki problem na nekom sistemu ili samo hoces da iskoristis "neiskoristenu" snagu cpu-a u uC-u koja se baca na debag sposobnosti, ili hoces da u svoj "korak asm" ide dodas debuging capabilities?? (jel ima taj ide neko ime da prestanem da ga zovem "korak asm")
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom20.01.2009. u 12:24 - pre 185 meseci
@Stojane
Svaka cast! Masina i po!
Posto prodajes ti ovo :)

@Bogdane
U pravu si za osciloskop, bolje se vidi sa njim, ali ja sam se vise orjentisao na karakteristiku cijena/upotrebljivost. Pristojan osciloskop kosta puno. A jos ako treba da ima trigerovanje i logovanje podataka i vezu za PC-om, i pristojnu brzinu, onda u hobi uslovima mozes samo bubreg da prodas da bi ga kupio....Samo pristojne sonde za osciloskop mogu kostati vise od citavog LA-a.
A brzina.... uskoro izlazi standard USB 3.0 sa 5.0 Gbit/s (625 MB/s), tako da, sta znam, sa 24 MHz se ne moze ni najraniji USB od 12 Mbit/s pratiti. Jedan od najvecih "problema" je sto se sve razvija vrtoglavom brzinom, tako da sta god da kupis - godinu, najvise dvije, i na tavan sa njim, a das grdne pare za to. No, to je vec druga tema....

Pozdrav.

 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom20.01.2009. u 13:19 - pre 185 meseci
Ne sumnjam da ucesnicima na ovoj temi moze biti problem da dibagiraju softver bez obzira kakva je greska i bez pomoci integrisanog dibagera. Imam utisak da ste dovoljno iskusni da to uradite. Nije ni meni problem da nadjem gresku (pitanje je samo trenutak kada ce to biti). Bogdan.kecman je u pravu, zavrsavam razvojni sistem i sada treba da implementiram ono sto moze da pruzi integrisani dibager. To sve treba da je namenjeno prosecnom programeru kome dibagiranje nije bas jednostavna stvar.

Istovremeno zavrsavam projekat koji je dosta slozen, i upravo zelim da jedan problem resim koristeci integrisani dibager. Problem je sto ne mogu da osmislim nacin za jednostavnim koriscenjem onoga sto priza integrisani dibager.

Zamolio bih vas da ocenimo korisnost nekih mogucnosti. Vec sam rekao da BDC ima dva 16-to bitna komparatora A i B. U A uvek ide adresa, a u B adresa ili 8-o bitni podatak na nizem bajtu.

1. Moze se upisati adresa u A i to se zove tag. Kada se tokom izvrsenja programa dostigne adresa u A desi se triger. Ako je BDC u begin modu, od trigera pa nadalje u FIFO se smestaju sve adrese promene toka programa i to ne jmp i jsr na fiksnu adresu vec samo jmp i jsr preko indeksnog registra, jer se njegova vrednost ne zna. Medjutim takvih naredbi gotovo da nema u prosecnom programu. Zatim se smestaju sve adrese na uslovni skok ako je uslov ispunjen, sve adrese povratka iz podprograma i adresa interrupt procedure i njena adresa povratka. Kada se FIFO napuni moze se konfigurisati da MCU predje u aktivan BDM kada MCU stoji i FIFO moze da se procita, ili da se izazove softverski interript (SWI), a da program nastavi sa radom. Ako je BDM i end modu, FIFO se stalno puni i na triger prestaje punjenje sa prelasko u aktivan BDM ili izazivanjem SWI. Jednaom aktiviran triger pokrece sednu sesiju dibagiranja u begin modu, ili zavrsava sesiju dibagiranja u end modu. Za novu sesiju dibagiranja treba ponovo postaviti odredjene kontrolne bitove u BDC-u.

2. U B je adresa a triger se desava kada adresa izvrsenja programa postane jednaka B. FIFO se puni podacima sa magistrale podataka na nacin zavisno od toga da li je begin ili edn mod.

3. U A i B su adrese, a triger se desava kada izvrsenje programa prvo prodje kroz adresu A pa dostigne adresu B. FIFO se puni podacima sa magistrale podataka na nacin zavisno od toga da li je begin ili edn mod.

4. Ako se u A i B postave dve adrese, dakle dva taga onda su moguce kombinacije:

- triger se desava kada se adresa izvrsenja programa nadje u opsegi izmedju A i B (A <= B);
- triger se desava kada se adresa izvrsenja programa nadje van opsega A i B;
- triger se desava kada se adresa izvrsenja programa poklopi sa A ili B;
- triger se desava kada se adresa izvrsenja programa prvo poklopi sa A a posle toga sa B.

Sa trigerom se desava sve isto kao pod 1.

5. U A je adresa a u B podatak, a posebno se definise smer podatka write, read ili oba. Moze se BDC setovati da:



- Adresna magistrala je jednaka sa A i magistrala podataka je jednaka sa B uz ispunjenje uslova write, read ili oba;
- Adresna magistrala je jednaka sa A i magistrala podataka je razlicita od B uz ispunjenje uslova write, read ili oba;

U ovom slucaju da pomenem da triger moze biti tagovan, kada adresa u A (ili B) mora da bude adresa koda naredbe, ili triger moze biti forsirani, i tada se be gleda da li su na adresama A (ili B) kodovi naredbi. U ovom slucaju triger treba da bude forsiran za razliku od ranije opisanih.

6. Uvek je moguce citati preko BDM linije bilo koju lokaciju u memorijskoj mapi a da pri tome program normalno radi punom brzinom.

E sad sta ne valja.

1. FIFO je premali da bi se neke informacije mogle iz njega da izvuku. Moralo bi cesto da se pomeraju tagovi da bi se napipalo mesto greske.

2.Aktiviranje SWI daje siroke mogucnosti koje zavise samo od maste programera. Medjutim, kod SWI procedure bi trebao biti isti da se ne bi morao program kompajlirati uvek kada se promeni tag ili adresa varijable cija se vrednost zeli videti. Osim toga, kada se zavrsi sesija dibagiranja BDC podmece CPU-u kod naredbe SWI, kako bi se aktivirala ta procedura, ali se pri tome ne uvecava programski brojac (sto je i normalno jer SWI nije procitan iz flash-a), pa se posle zavrsenja SWI procedure program opet vraca na istu adresu. Aktiviranjem SWI zavrsena je jedna sesija dibagiranja, pa bi bilo pozeljno u toj proceduri omoguciti sledecu sesiju dibagiranja. Ako se tako uradi onda se program vraca na isti tag i ponovo aktivira SWI i tako u nedogled. Resenje za ovo je triger koji se desava na B posle A, ali za ovo treba obeleziti 2 taga (nikad dva dobra).

Dakle, znam kako sve to funkcionise ali ne znam kako da to osmislim sa sledecim ciljem:

1. Da kada citam vrednost varijable to bude u tacki programa koju sam izabrao. Dovijam se tako sto deklarisem jednu pomocnu varijablu, i nju punim vrednoscu zaljene varijable na zeljenom mestu, pa onda citam tu pomocnu varijablu. Ali to zahteva kompajliranje programa i prenosenje u MCU uvek kada pomerim mesto na kojem zalim da znam vrednost varijable.

2. Zeleo bih da za neku proceduru rekonstruisem citav niz poziva.

3. Zeleo bih da znam koliko se puta koja procedura poziva u programu

Dakle sto vise podataka za dibagiranje i sto vise statistickih podataka kako bi se napisao sto je moguce efikasniji program

Bio sam opsiran, ali valjda sam osvetlio problem.

Pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Dibagiranje softvera mikrokontrolera integerisanim dibagerom20.01.2009. u 15:46 - pre 185 meseci
Ne mozes sa BDC-om dobijati informacije u realnom vremenu, osim ako se za konkretan problem pod realnim vremenom moze smatrati ocitavanje neke vrednosti na svakih 40us ili rijedje. To je granica tog koncepta i preko te granice on ne moze ma sta mi smisljali. Sve sto mozemo da uradimo je da mijenjamo sam sistem tako da 40us za njega ipak bude "real-time". I to je ono oko cega moze prica da se vrti, a rjesenja za to zavise od svakog pojedinacnog slucaja, maste i dovitljivosti arhitekte tog sistema.

Po mom misljenju, najvise sto mozes da uradis je da u svom razvojnom okruzenju omogucis korisnicima da imaju mogucnost potpune kontrole nad BDC (tj. da su podrzane sve opcije njegovog konfigurisanja), pa neka ga svako konfigurise vec prema tome sta mu u konkretnom projektu treba.

Za ova tri pitanja na kraju:

Citat:
1. Da kada citam vrednost varijable to bude u tacki programa koju sam izabrao. Dovijam se tako sto deklarisem jednu pomocnu varijablu, i nju punim vrednoscu zaljene varijable na zeljenom mestu, pa onda citam tu pomocnu varijablu. Ali to zahteva kompajliranje programa i prenosenje u MCU uvek kada pomerim mesto na kojem zalim da znam vrednost varijable.

Za svaku tacku progrma u kojoj zelis da ocitas vrednost varijable definisi po jednu zasebnu pomocnu varijablu (ako treba 100 onda 100). BDC-om onda citaj bas onu koja odgovara mjestu koje te interesuje. Za jedno te isto mjesto mozes definisati i vise pomocnih varijabli pa ces tako znati sta je bilo prilikom prvog, petog, desetog prolaska kroz to mjesto/tacku programa, kao i sta je bilo sa tom varijablom u svim ostalim tackama (i programskim i vremenskim).

Citat:
2. Zeleo bih da za neku proceduru rekonstruisem citav niz poziva.

3. Zeleo bih da znam koliko se puta koja procedura poziva u programu


Pracenje ovih stvari implementiraj u samom programu mikrokontrolera. Neka svaka funkcija koja te interesuje sama uveca varijablu koja predstavlja broj njenih poziva i nek snimi parametre koji su ti od interesa (za rekonstrukciju), pa kasnije iscitavaj i analiziraj.

Kad zavrsis analizu, izbrisi te dijelove iz programa i kraj. (Nije tako trivijalno ako programiras u asembleru, ali sve ima svoju cijenu).

Ako uC nema dovoljno kapaciteta da odradi sve to i uz to da obavlja svoju primarnu funkciju, stavi 3 puta jaci procesor, pa kad zavrsis statisticka ispitivanja, vrati onaj koji je taman dovoljan.

Pozdrav.
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Dibagiranje softvera mikrokontrolera integerisanim dibagerom

Strane: 1 2

[ Pregleda: 5986 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.