A PIC faék egyszerűségű felépítésébe tettek egy kis csavart a tervezők, mert a különféle regisztereket két BANK-ba rendezték, melyben 020h-tól terjedő 96 byte és 0A0h-tól 32 byte SRAM terület található. Egyetlen probléma, hogy hiába definiálja az ember a kódja elején az általa használt regiszterek címeit, a kód futásakor csak akkor lehet műveletet végezni, ha a BANKSEL az adott regiszter BANK-jára mutat.
Esetemben a RESULTHI és RESULTLO-nak megfelelő regiszterek a BANK0-ban voltak, ahogy az összes többi is. Mivel az ADRESH BANK-ja is a BANK0 a kód tökéletesen futott a MOVWF RESULTLO sorig, aztán dobott egy hátast.
A javítás egy BANKSEL RESULTLO sor beszúrása volt a MOVWF RESULTLO elé. Csak épp kellett hozzá két és fél óra.
Ilyenkor visszasírom az egy címtérrel rendelkező processzorokat...
- Hiena blogja
- A hozzászóláshoz be kell jelentkezni
- 1708 megtekintés
Hozzászólások
A példakód ettől még akár jó is lehet, ha feltételezzük, hogy RESULTHI és RESULTLO azon a többnyire 16 byte-os címtartományon van, amely sohasem lapozódik el. Mondjuk erre az értékes területre nem teszünk olyan változót, amely máshol is lehet.
A cím megtévesztő, mert arra utal, mintha a PIC-nek lenne lapozási hibája, holott Te voltál figyelmetlen.
Egyébként én sohasem írok le makrót, úgy értem, a BANKSEL-t le nem írnám saját kódban! Vagy MOVLB, vagy a STATUS regiszter piszkálása, attól függően, milyen PIC-ről van szó. És hogy miért? Lássam, mi történik, az hány gépi ciklus. Van, ahol számít ez, mi több, van, ahol a számtalan elágazás minden ágán hajszál pontosan ugyanakkora futásidő kell legyen.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
A példa jó, ha ugyanabban a BANK-ban van a RESULTLO megadva. Elég triviális programozási hiba ez, viszont benézve csupa móka és kacagás tud lenni. Főleg olyan architektúráknál, ahol a memória és a speciális regiszterek ugyanazt a címtartományt használják csak másik lapon.
Mivel nem időzítéskritikus az alkalmazás a makró nem ördögtől való.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "
- A hozzászóláshoz be kell jelentkezni
Ezért használok c-t (CCS) pic programozásra, amikor meg fontos az időzítés, csak akkor nyúlok asm-hoz, de ha lehet, ott is beágyazva
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
Ezért nem használok PIC-et ;-)
- A hozzászóláshoz be kell jelentkezni
Én meg megtanultam programozni. ;)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
muha +1 :D
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
Kinek mi ;-)
- A hozzászóláshoz be kell jelentkezni
+1, igaz, avr alatt
- A hozzászóláshoz be kell jelentkezni
+1 Bár én MikroC-t használtam/használok PIC-hez. Avr esetén meg Atmel Studio
- A hozzászóláshoz be kell jelentkezni
Ugyan senki nem kérdezte, azért mondom: mcedit és gputils, a végén pedig pk2cmd meg PICkit2.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Mostanság nem nagyon érdemes már szerintem 16F (és alatti) szériákkal foglalkozni, főleg, ha nem 10 millió darab készül az eszközből. A 24-es széria elég olcsó és van hozzá ingyenes C fordító is.
Illetve az MPLAB X nagyon szépen működik Linux alatt is. (Bár ha jól tudom a PK2-t már nem támogatja.)
- A hozzászóláshoz be kell jelentkezni
Szegény ember vízzel főz. Egyfelől jobban szeretek assembly-ben programozni, mert mikrokontrolleren gyakran időkritikus a művelet, trükközni érdemes, hogy memóriában, futásidőben hatékony legyen a kód, itt nincsenek megabyte-os memória allokációk. Másfelől nekem szempont, hogy a PICkit2-met tudjam használni, a fejlesztést Linuxon el tudjam végezni.
Aztán a bitekkel, regiszterekkel való bíbelődésre nekem kézenfekvőbb, olvasmányosabb, érthetőbb az assembly kód, mint a C, még akkor is, ha ez első olvasatra meredeknek tűnik.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Ez igaz, de sok dolgot jóval egyszerűbb C-ben megoldani, pl.: lebegőpontos számítási műveletek, SD kártya / FAT FS, TCP/IP hálózat (ezek már egyáltalán nem állnak messze egy mai mikrovezérlőtől).
- A hozzászóláshoz be kell jelentkezni
Erre már inkább processzor kell. Magam részéről munkához is, hobbiként is olyan dolgokat csináltam PIC-kel, amely feladatok valóban hardware közeliek, vezérlés jellegűek, s nem kellett előbb sok tíz, sok száz oldalnyi RFC-t olvasni.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Hosszú távon szerintem át kell állni ARM-re és C-re. Elképesztő, hogy ugyan azon az áron mennyivel erősebb hardvert kapsz (Cortex M0/M3/M4). Csak az a szívás, hogy ahány gyártó, annyiszor kell újra tanulni a perifériák használatát, meg a datasheetek szokásait. Ennyiből jó pl az Atmel, ők elég "seamless" átállást kínálnak, de nekik meg elég drága a hardverük.
- A hozzászóláshoz be kell jelentkezni