Warning: Illegal string offset 'name' in [path]/includes/functions.php on line 6439
Atmelis un C -
+
... 8 9 10

thread: Atmelis un C

  1. #91
    Senior Member
    Apr 2007
    2,087

    Jurkin, tev ir taisnība, tas, ko rakstīju kā "ekvivalento" kodu, tiešām nav vis tik ekvivalents, ja grib izmantot vw_tx_sample vērtību. Pareizi esi pamanījis Jebkurā gadījumā, evaluējot "a++" a finālā tiks palielināts par vienu vienību. Tas ir postfix operators. Ja raksta ++a, tad otrādi, ar prefix operatoru vispirms tiks palielināts par 1.

  2. #92
    Senior Member
    Nov 2009
    Jēkabpils
    2,046

    Labs vakars!
    It kā vienkāršs kods. Kontrolierī šuvis neesmu, jo viss ir sākuma stadijā. Tātad tikai debagerī.
    Kāpēc pirmo reizi ejot caur bezgalīgo ciklu debageris pārlec pāri otrajam ciklam. Pēc tam viss ir kārtībā. Kamēr skaitītājs aizskaita līdz 150, notiek ņemšanās iekš while, tad uzmetas OCF0A bits un process aizlec tālāk? Vai tas varbūt kaut kā saistīts ar kaut kādām kompilēšanas optimizācijām?

    :
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    int main(void)
    {
        
        DDRB = (1<<PB0);
        
        TCCR0A = (1<<WGM01);
        TCCR0B = (1<<CS02)|(0<<CS01);
        OCR0A = 150;
        
        while(1)
        {
            while(!(TIFR0&(1<<OCF0A)))
            { }
            
            PORTB ^= (1<<PB0);
            
            TIFR0 |= (1<<OCF0A);
        }
    }
    edit: upsss! viss kārtībā. Gāju debagerī pa soļiem un nepaskatījos uz pašu portu. Šis uzlec virsū rindai, bet porta vērtība nenomainās. Laikam vienkārši procesa vizualizācija kaut kāda greiza.

+