📄 kertimer.lst
字号:
103:kertimer.c **** mInterval=interval;
513 .LM40:
514 014e A092 0000 sts mInterval,r10
104:kertimer.c **** timer0_setInterval(mInterval);
516 .LM41:
517 0152 8A2D mov r24,r10
518 0154 0E94 0000 call timer0_setInterval
105:kertimer.c **** setIntervalFlag = 0;
520 .LM42:
521 0158 1092 0000 sts setIntervalFlag,__zero_reg__
522 .L15:
106:kertimer.c ****
107:kertimer.c **** }
108:kertimer.c **** }
109:kertimer.c **** os_atomic_end(_nesc_atomic); }
524 .LM43:
525 015c 8C2F mov r24,r28
526 015e 0E94 0000 call os_atomic_end
527 .L11:
528 .LBE5:
110:kertimer.c **** return SUCCESS;
111:kertimer.c **** }
530 .LM44:
531 0162 80E0 ldi r24,lo8(0)
532 0164 90E0 ldi r25,hi8(0)
533 /* epilogue: frame size=0 */
534 0166 CF91 pop r28
535 0168 1F91 pop r17
536 016a 0F91 pop r16
537 016c FF90 pop r15
538 016e EF90 pop r14
539 0170 DF90 pop r13
540 0172 CF90 pop r12
541 0174 BF90 pop r11
542 0176 AF90 pop r10
543 0178 0895 ret
544 /* epilogue end (size=10) */
545 /* function kertimer_start size 116 (97) */
552 .global kertimer_stop
554 kertimer_stop:
112:kertimer.c ****
113:kertimer.c **** void kertimer_stop(uint8_t id)
114:kertimer.c **** {
556 .LM45:
557 /* prologue: frame size=0 */
558 017a EF92 push r14
559 017c FF92 push r15
560 017e 0F93 push r16
561 0180 1F93 push r17
562 /* prologue end (size=4) */
115:kertimer.c **** if (id>=KER_TIMERS) return FAIL;
564 .LM46:
565 0182 8330 cpi r24,lo8(3)
566 0184 E8F5 brsh .L16
116:kertimer.c **** if (mState&(0x1L<<id))
568 .LM47:
569 0186 91E0 ldi r25,lo8(1)
570 0188 E92E mov r14,r25
571 018a F12C mov r15,__zero_reg__
572 018c 012D mov r16,__zero_reg__
573 018e 112D mov r17,__zero_reg__
574 0190 04C0 rjmp 2f
575 0192 EE0C 1: lsl r14
576 0194 FF1C rol r15
577 0196 001F rol r16
578 0198 111F rol r17
579 019a 8A95 2: dec r24
580 019c D2F7 brpl 1b
581 019e 8091 0000 lds r24,mState
582 01a2 9091 0000 lds r25,(mState)+1
583 01a6 A091 0000 lds r26,(mState)+2
584 01aa B091 0000 lds r27,(mState)+3
585 01ae 8E21 and r24,r14
586 01b0 9F21 and r25,r15
587 01b2 A023 and r26,r16
588 01b4 B123 and r27,r17
589 01b6 0097 sbiw r24,0
590 01b8 A105 cpc r26,__zero_reg__
591 01ba B105 cpc r27,__zero_reg__
592 01bc 09F1 breq .L16
593 .LBB8:
117:kertimer.c **** { // if the timer is running
118:kertimer.c **** { os_atomic_t _nesc_atomic = os_atomic_start();
595 .LM48:
596 01be 0E94 0000 call os_atomic_start
119:kertimer.c **** {mState &= ~(0x1L<<id);
598 .LM49:
599 01c2 E094 com r14
600 01c4 F094 com r15
601 01c6 0095 com r16
602 01c8 1095 com r17
603 01ca 8091 0000 lds r24,mState
604 01ce 9091 0000 lds r25,(mState)+1
605 01d2 A091 0000 lds r26,(mState)+2
606 01d6 B091 0000 lds r27,(mState)+3
607 01da 8E21 and r24,r14
608 01dc 9F21 and r25,r15
609 01de A023 and r26,r16
610 01e0 B123 and r27,r17
611 01e2 8093 0000 sts mState,r24
612 01e6 9093 0000 sts (mState)+1,r25
613 01ea A093 0000 sts (mState)+2,r26
614 01ee B093 0000 sts (mState)+3,r27
120:kertimer.c **** if (!mState)
616 .LM50:
617 01f2 0097 sbiw r24,0
618 01f4 A105 cpc r26,__zero_reg__
619 01f6 B105 cpc r27,__zero_reg__
620 01f8 19F4 brne .L16
121:kertimer.c **** {
122:kertimer.c **** setIntervalFlag = 1;
622 .LM51:
623 01fa 81E0 ldi r24,lo8(1)
624 01fc 8093 0000 sts setIntervalFlag,r24
625 .L16:
626 .LBE8:
627 /* epilogue: frame size=0 */
628 0200 1F91 pop r17
629 0202 0F91 pop r16
630 0204 FF90 pop r15
631 0206 EF90 pop r14
632 0208 0895 ret
633 /* epilogue end (size=5) */
634 /* function kertimer_stop size 73 (64) */
638 KERTimer_fired:
123:kertimer.c **** }
124:kertimer.c **** return SUCCESS;}
125:kertimer.c **** os_atomic_end(_nesc_atomic); }
126:kertimer.c **** }
127:kertimer.c ****
128:kertimer.c **** return FAIL; //timer not running
129:kertimer.c **** }
130:kertimer.c ****
131:kertimer.c **** static void adjustInterval(void) {
132:kertimer.c **** uint8_t i, val = maxTimerInterval;
133:kertimer.c **** if ( mState)
134:kertimer.c **** {
135:kertimer.c **** for (i=0;i<KER_TIMERS;i++)
136:kertimer.c **** {
137:kertimer.c **** if ((mState&(0x1L<<i)) && (mTimerList[i].ticksLeft <val ))
138:kertimer.c **** {
139:kertimer.c **** val = mTimerList[i].ticksLeft;
140:kertimer.c **** }
141:kertimer.c **** }
142:kertimer.c ****
143:kertimer.c **** { os_atomic_t _nesc_atomic = os_atomic_start();
144:kertimer.c **** {
145:kertimer.c **** mInterval = val;
146:kertimer.c **** timer0_setInterval(mInterval);
147:kertimer.c **** setIntervalFlag = 0;
148:kertimer.c **** }
149:kertimer.c **** os_atomic_end(_nesc_atomic);
150:kertimer.c **** }
151:kertimer.c ****
152:kertimer.c **** }
153:kertimer.c **** else
154:kertimer.c **** {
155:kertimer.c **** { os_atomic_t _nesc_atomic = os_atomic_start();
156:kertimer.c **** {
157:kertimer.c **** mInterval=maxTimerInterval;
158:kertimer.c **** timer0_setInterval(mInterval);
159:kertimer.c **** setIntervalFlag = 0;
160:kertimer.c **** }
161:kertimer.c **** os_atomic_end(_nesc_atomic); }
162:kertimer.c ****
163:kertimer.c **** }
164:kertimer.c ****
165:kertimer.c **** }
166:kertimer.c ****
167:kertimer.c **** static void enqueue(uint8_t value)
168:kertimer.c **** {
169:kertimer.c **** if (queue_tail == KER_TIMERS - 1)
170:kertimer.c **** queue_tail = -1;
171:kertimer.c **** queue_tail++;
172:kertimer.c **** queue_size++;
173:kertimer.c **** queue[(uint8_t)queue_tail] = value;
174:kertimer.c **** }
175:kertimer.c **** static uint8_t dequeue()
176:kertimer.c **** {
177:kertimer.c **** if (queue_size == 0)
178:kertimer.c **** return KER_TIMERS;
179:kertimer.c **** if (queue_head == KER_TIMERS - 1)
180:kertimer.c **** queue_head = -1;
181:kertimer.c **** queue_head++;
182:kertimer.c **** queue_size--;
183:kertimer.c **** return queue[(uint8_t)queue_head];
184:kertimer.c **** }
185:kertimer.c **** static void KERTimer_fired(void)
186:kertimer.c **** {
640 .LM52:
641 /* prologue: frame size=0 */
642 /* prologue end (size=0) */
643 .LBB9:
644 .LBB10:
646 .LM53:
647 020a 9091 0000 lds r25,queue_size
648 020e 9923 tst r25
649 0210 19F4 brne .L21
651 .LM54:
652 0212 23E0 ldi r18,lo8(3)
653 0214 30E0 ldi r19,hi8(3)
654 0216 16C0 rjmp .L22
655 .L21:
657 .LM55:
658 0218 8091 0000 lds r24,queue_head
659 021c 8230 cpi r24,lo8(2)
660 021e 19F4 brne .L23
662 .LM56:
663 0220 8FEF ldi r24,lo8(-1)
664 0222 8093 0000 sts queue_head,r24
665 .L23:
667 .LM57:
668 0226 8091 0000 lds r24,queue_head
669 022a 8F5F subi r24,lo8(-(1))
670 022c 8093 0000 sts queue_head,r24
672 .LM58:
673 0230 9150 subi r25,lo8(-(-1))
674 0232 9093 0000 sts queue_size,r25
675 0236 E82F mov r30,r24
676 0238 FF27 clr r31
677 023a E050 subi r30,lo8(-(queue))
678 023c F040 sbci r31,hi8(-(queue))
679 023e 8081 ld r24,Z
680 0240 282F mov r18,r24
681 0242 3327 clr r19
682 .L22:
683 .LBE10:
684 .LBE9:
187:kertimer.c **** void (*func)(void );
188:kertimer.c **** uint8_t itimer = dequeue();
189:kertimer.c **** //printf("\n------1----\n");
190:kertimer.c **** if (itimer < KER_TIMERS)
686 .LM59:
687 0244 2330 cpi r18,lo8(3)
688 0246 80F4 brsh .L20
191:kertimer.c **** {
192:kertimer.c **** //printf("\n------2-----\n");
193:kertimer.c **** func=mTimerList[itimer].tp;
690 .LM60:
691 0248 3327 clr r19
692 024a 8BE0 ldi r24,lo8(11)
693 024c 90E0 ldi r25,hi8(11)
694 024e 289F mul r18,r24
695 0250 F001 movw r30,r0
696 0252 299F mul r18,r25
697 0254 F00D add r31,r0
698 0256 389F mul r19,r24
699 0258 F00D add r31,r0
700 025a 1124 clr r1
701 025c E050 subi r30,lo8(-(mTimerList))
702 025e F040 sbci r31,hi8(-(mTimerList))
703 0260 0184 ldd __tmp_reg__,Z+9
704 0262 F285 ldd r31,Z+10
705 0264 E02D mov r30,__tmp_reg__
194:kertimer.c **** func();
707 .LM61:
708 0266 0995 icall
709 .L20:
710 0268 0895 ret
711 /* epilogue: frame size=0 */
712 026a 0895 ret
713 /* epilogue end (size=1) */
714 /* function KERTimer_fired size 49 (48) */
719 .global KERTimer_Fire
721 KERTimer_Fire:
195:kertimer.c **** }
196:kertimer.c ****
197:kertimer.c **** }
198:kertimer.c ****
199:kertimer.c **** void KERTimer_Fire(void)
200:kertimer.c **** {
723 .LM62:
724 /* prologue: frame size=0 */
725 026c 4F92 push r4
726 026e 5F92 push r5
727 0270 6F92 push r6
728 0272 7F92 push r7
729 0274 9F92 push r9
730 0276 AF92 push r10
731 0278 BF92 push r11
732 027a CF92 push r12
733 027c DF92 push r13
734 027e EF92 push r14
735 0280 FF92 push r15
736 0282 0F93 push r16
737 0284 1F93 push r17
738 0286 CF93 push r28
739 0288 DF93 push r29
740 /* prologue end (size=15) */
201:kertimer.c **** uint8_t i;
202:kertimer.c **** setIntervalFlag = 1;
742 .LM63:
743 028a 81E0 ldi r24,lo8(1)
744 028c 8093 0000 sts setIntervalFlag,r24
203:kertimer.c **** if (mState)
746 .LM64:
747 0290 8091 0000 lds r24,mState
748 0294 9091 0000 lds r25,(mState)+1
749 0298 A091 0000 lds r26,(mState)+2
750 029c B091 0000 lds r27,(mState)+3
751 02a0 0097 sbiw r24,0
752 02a2 A105 cpc r26,__zero_reg__
753 02a4 B105 cpc r27,__zero_reg__
754 02a6 09F4 brne .+2
755 02a8 89C0 rjmp .L26
204:kertimer.c **** {
205:kertimer.c **** for (i=0;i<KER_TIMERS;i++)
757 .LM65:
758 02aa 9924 clr r9
759 02ac 60E0 ldi r22,lo8(mTimerList)
760 02ae C62E mov r12,r22
761 02b0 60E0 ldi r22,hi8(mTimerList)
762 02b2 D62E mov r13,r22
763 02b4 AA24 clr r10
764 02b6 BB24 clr r11
765 .L36:
206:kertimer.c **** {
207:kertimer.c **** if (mState&(0x1L<<i))
767 .LM66:
768 02b8 51E0 ldi r21,lo8(1)
769 02ba E52E mov r14,r21
770 02bc F12C mov r15,__zero_reg__
771 02be 012D mov r16,__zero_reg__
772 02c0 112D mov r17,__zero_reg__
773 02c2 0A2C mov r0,r10
774 02c4 04C0 rjmp 2f
775 02c6 EE0C 1: lsl r14
776 02c8 FF1C rol r15
777 02ca 001F rol r16
778 02cc 111F rol r17
779 02ce 0A94 2: dec r0
780 02d0 D2F7 brpl 1b
781 02d2 4090 0000 lds r4,mState
782 02d6 5090 0000 lds r5,(mState)+1
783 02da 6090 0000 lds r6,(mState)+2
784 02de 7090 0000 lds r7,(mState)+3
785 02e2 D301 movw r26,r6
786 02e4 C201 movw r24,r4
787 02e6 8E21 and r24,r14
788 02e8 9F21 and r25,r15
789 02ea A023 and r26,r16
790 02ec B123 and r27,r17
791 02ee 0097 sbiw r24,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -