[OT] Mel by takovy programator uspet u zkousky ?

Petr Labaj labaj na volny.cz
Sobota Leden 28 15:36:48 CET 2012


Tak jsem se zase na chvili dostal k bastleni s PIC32.
Chtel jsem pouzit nejake knihovny a dalsi SW, ktery Microchip
poskytuje. Nestacim vychazet z udivu nad nedomyslenostma,
kterymi je jejich SW prospikovavy.

Od nejvyssi koncepcni urovne programu: 
Napr. udelaji klienta bootloaderu, ale ten ma zablokovane cteni
a verifikaci do doby, nez chip naprogramuji, takze pokud
klienta ukoncim a pustim znovu, tak pozdeji uz nemuzu zkontrolovat
obsah MCU. Navic ten klient neumi nikam ulozit nastaveni
parametru, takze pri kazdem spusteni musim naklikat IP
adresu. Upravit se to da jen ve zdrojaku, ale ten je napsany tak,
ze pro jeho preklad nestaci free verze Visual Studio Express.

Pres koncepci ovladani periferii:
Napr. driver pro jejich vlastni Ethernetovy radic ENC28J60
je napsany tak, ze neumi vyuzivat IRQ, takze musi byt obsluhovan
poolingem.

Po nejnizsi uroven jednoduchych rutin.
Nasledujici kousek programu je (c) by Microchip (snad se jeste
i dnes muze citovat kousek zdrojaku).

Docela by me zajimalo, pokud je zde nekdo kdo uci a zkousi
programovani, jestli by student u zkousky uspel s takto napsanou
trivialni rutinou.
Faktem je, ze to vyresili "spravne", tj. vlastnosti popsali do Errata
(zde nazvane Side Effects).

PL

P.S. Ano, vim, ze to muzu opravit. A taky jsem to samozrejme
udelal. Ale to snad neni reseni. Uvedl jsem tady jen 3 priklady,
ale mam pocit, ze muzu nahodne vybrat kterykoli blok zdrojaku
a bude tam nejaka nelogicnost. Nebo je treba se s tim smirit
a brat to tak, ze je hlavni, ze to "nejak" funguje ?

P.S.2 Sorry za vylev emoci.

/********************************************************************
* Function:  delay_us()
*
* Input:   Micro second
*
* Side Effects: Uses Core timer. This may affect other functions using core timers.
    For example, core timer interrupt may not work, or may loose precision.    
*
* Overview:     Provides Delay in microsecond.
*
********************************************************************/
void delay_us(UINT us)
{
   
    UINT targetCount;  
    UINT bakupCount; 
    UINT8 loop = 0;
    // Assert us not zero. This must be caught during debug phase.
    ASSERT(us!=0);
    // backup current count of the core timer.
    bakupCount = ReadCoreTimer();
    // Core timer increments every 2 sys clock cycles.
    // Calculate the counts required to complete "us". 
    targetCount = countPerMicroSec * us;      
    // Restart core timer.
    WriteCoreTimer(0);    
    // Wait till core timer completes the count.    
    while(ReadCoreTimer() < targetCount);
    
    // Restore count back.
    WriteCoreTimer(bakupCount + targetCount);        
   
}  



Další informace o konferenci Hw-list