📄 ucos_ii.ls
字号:
1853 0106 01 dc.b 1
1854 0107 00 dc.b 0
2157 ; 114 void OSEventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)
2157 ; 115 {
2158 switch .text
2159 0000 _OSEventTaskRdy:
2161 0000 3b pshd
2162 0001 1b99 leas -7,s
2163 00000007 OFST: set 7
2166 ; 124 y = OSUnMapTbl[pevent->OSEventGrp]; /* Find highest prio. task waiting for message */
2168 0003 b746 tfr d,y
2169 0005 e64d ldab 13,y
2170 0007 87 clra
2171 0008 b746 tfr d,y
2172 000a e6ea0008 ldab _OSUnMapTbl,y
2173 000e 6b82 stab OFST-5,s
2174 ; 125 bity = OSMapTbl[y];
2176 ;***** ldab OFST-5,s ***** L1
2177 ;***** clra ***** C0
2178 0010 b746 tfr d,y
2179 0012 e6ea0000 ldab _OSMapTbl,y
2180 0016 6b85 stab OFST-2,s
2181 ; 126 x = OSUnMapTbl[pevent->OSEventTbl[y]];
2183 0018 ed87 ldy OFST+0,s
2184 001a e682 ldab OFST-5,s
2185 ;***** clra ***** C0
2186 001c 19ee leay d,y
2187 001e e642 ldab 2,y
2188 ;***** clra ***** C0
2189 0020 b746 tfr d,y
2190 0022 e6ea0008 ldab _OSUnMapTbl,y
2191 0026 6b83 stab OFST-4,s
2192 ; 127 bitx = OSMapTbl[x];
2194 ;***** ldab OFST-4,s ***** L1
2195 ;***** clra ***** C0
2196 0028 b746 tfr d,y
2197 002a e6ea0000 ldab _OSMapTbl,y
2198 002e 6b84 stab OFST-3,s
2199 ; 128 prio = (INT8U)((y << 3) + x); /* Find priority of task getting the msg */
2201 0030 e682 ldab OFST-5,s
2202 0032 58 lslb
2203 0033 58 lslb
2204 0034 58 lslb
2205 0035 eb83 addb OFST-4,s
2206 0037 6b86 stab OFST-1,s
2207 ; 129 if ((pevent->OSEventTbl[y] &= ~bitx) == 0) { /* Remove this task from the waiting list */
2209 0039 ed87 ldy OFST+0,s
2210 003b e682 ldab OFST-5,s
2211 ;***** clra ***** C0
2212 003d 19ee leay d,y
2213 003f e684 ldab OFST-3,s
2214 0041 51 comb
2215 0042 e442 andb 2,y
2216 0044 6b42 stab 2,y
2217 0046 2609 bne L1301
2218 ; 130 pevent->OSEventGrp &= ~bity;
2220 0048 ed87 ldy OFST+0,s
2221 004a e685 ldab OFST-2,s
2222 004c 51 comb
2223 004d e44d andb 13,y
2224 004f 6b4d stab 13,y
2225 0051 L1301:
2226 ; 132 ptcb = OSTCBPrioTbl[prio]; /* Point to this task's OS_TCB */
2228 0051 e686 ldab OFST-1,s
2229 0053 87 clra
2230 0054 59 lsld
2231 0055 b746 tfr d,y
2232 0057 ecea0a24 ldd _OSTCBPrioTbl,y
2233 005b 6c80 std OFST-7,s
2234 ; 133 ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from readying task */
2236 005d 87 clra
2237 005e c7 clrb
2238 005f ed80 ldy OFST-7,s
2239 0061 6ce816 std 22,y
2240 ; 134 ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* Unlink ECB from this task */
2242 ;***** clra ***** C0
2243 ;***** clrb ***** C0
2244 ;***** ldy OFST-7,s ***** L1
2245 0064 6ce812 std 18,y
2246 ; 136 ptcb->OSTCBMsg = msg; /* Send message directly to waiting task */
2248 0067 ec8b ldd OFST+4,s
2249 ;***** ldy OFST-7,s ***** L1
2250 0069 6ce814 std 20,y
2251 ; 140 ptcb->OSTCBStat &= ~msk; /* Clear bit associated with event type */
2253 ;***** ldy OFST-7,s ***** L1
2254 006c e68d ldab OFST+6,s
2255 006e 51 comb
2256 006f e4e818 andb 24,y
2257 0072 6be818 stab 24,y
2258 ; 141 if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is ready (could be susp'd) */
2260 ;***** ldy OFST-7,s ***** L1
2261 ;***** tst 24,y ***** T3
2262 ;***** tstb ***** T4
2263 0075 2617 bne L3301
2264 ; 142 OSRdyGrp |= bity; /* Put task in the ready to run list */
2266 0077 e685 ldab OFST-2,s
2267 0079 fa0ab6 orab _OSRdyGrp
2268 007c 7b0ab6 stab _OSRdyGrp
2269 ; 143 OSRdyTbl[y] |= bitx;
2271 007f e682 ldab OFST-5,s
2272 0081 87 clra
2273 0082 b746 tfr d,y
2274 0084 e684 ldab OFST-3,s
2275 0086 eaea0aae orab _OSRdyTbl,y
2276 008a 6bea0aae stab _OSRdyTbl,y
2277 008e L3301:
2278 ; 145 }
2281 008e 1b89 leas 9,s
2282 0090 3d rts
2317 ; 163 void OSEventTaskWait (OS_EVENT *pevent)
2317 ; 164 {
2318 switch .text
2319 0091 _OSEventTaskWait:
2321 0091 3b pshd
2322 00000000 OFST: set 0
2325 ; 165 OSTCBCur->OSTCBEventPtr = pevent; /* Store pointer to event control block in TCB */
2327 0092 fd0aaa ldy _OSTCBCur
2328 0095 6ce812 std 18,y
2329 ; 166 if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { /* Task no longer ready */
2331 ;***** ldy _OSTCBCur ***** L1
2332 0098 e6e81b ldab 27,y
2333 009b 87 clra
2334 009c b746 tfr d,y
2335 009e fe0aaa ldx _OSTCBCur
2336 00a1 e6e01c ldab 28,x
2337 00a4 51 comb
2338 00a5 e4ea0aae andb _OSRdyTbl,y
2339 00a9 6bea0aae stab _OSRdyTbl,y
2340 00ad 260c bne L1501
2341 ; 167 OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
2343 ;***** ldy _OSTCBCur ***** L6
2344 00af b756 tfr x,y
2345 00b1 e6e81d ldab 29,y
2346 00b4 51 comb
2347 00b5 f40ab6 andb _OSRdyGrp
2348 00b8 7b0ab6 stab _OSRdyGrp
2349 00bb L1501:
2350 ; 169 pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX; /* Put task in waiting list */
2352 00bb ed80 ldy OFST+0,s
2353 ;***** ldx _OSTCBCur ***** L1
2354 00bd e6e01b ldab 27,x
2355 00c0 87 clra
2356 00c1 19ee leay d,y
2357 ;***** ldx _OSTCBCur ***** L1
2358 00c3 e6e01c ldab 28,x
2359 00c6 ea42 orab 2,y
2360 00c8 6b42 stab 2,y
2361 ; 170 pevent->OSEventGrp |= OSTCBCur->OSTCBBitY;
2363 00ca ed80 ldy OFST+0,s
2364 ;***** ldx _OSTCBCur ***** L1
2365 00cc e6e01d ldab 29,x
2366 00cf ea4d orab 13,y
2367 00d1 6b4d stab 13,y
2368 ; 171 }
2371 00d3 31 puly
2372 00d4 3d rts
2405 ; 189 void OSEventTO (OS_EVENT *pevent)
2405 ; 190 {
2406 switch .text
2407 00d5 _OSEventTO:
2409 00d5 3b pshd
2410 00000000 OFST: set 0
2413 ; 191 if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
2415 00d6 b746 tfr d,y
2416 00d8 fe0aaa ldx _OSTCBCur
2417 00db e6e01b ldab 27,x
2418 00de 87 clra
2419 00df 19ee leay d,y
2420 ;***** ldx _OSTCBCur ***** L1
2421 00e1 e6e01c ldab 28,x
2422 00e4 51 comb
2423 00e5 e442 andb 2,y
2424 00e7 6b42 stab 2,y
2425 00e9 260a bne L7601
2426 ; 192 pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
2428 00eb ed80 ldy OFST+0,s
2429 ;***** ldx _OSTCBCur ***** L1
2430 00ed e6e01d ldab 29,x
2431 00f0 51 comb
2432 00f1 e44d andb 13,y
2433 00f3 6b4d stab 13,y
2434 00f5 L7601:
2435 ; 194 OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Set status to ready */
2437 ;***** ldy _OSTCBCur ***** L6
2438 00f5 b756 tfr x,y
2439 ;***** clr 24,y ***** C0
2440 00f7 87 clra
2441 00f8 6ae818 staa 24,y
2442 ; 195 OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event */
2444 ;***** clra ***** C0
2445 00fb c7 clrb
2446 ;***** ldy _OSTCBCur ***** L1
2447 00fc 6ce812 std 18,y
2448 ; 196 }
2451 00ff 31 puly
2452 0100 3d rts
2492 ; 213 void OSEventWaitListInit (OS_EVENT *pevent)
2492 ; 214 {
2493 switch .text
2494 0101 _OSEventWaitListInit:
2496 0101 3b pshd
2497 0102 37 pshb
2498 00000001 OFST: set 1
2501 ; 218 pevent->OSEventGrp = 0x00; /* No task waiting on event */
2503 0103 b746 tfr d,y
2504 ;***** clr 13,y ***** C0
2505 0105 c7 clrb
2506 0106 6b4d stab 13,y
2507 ; 219 for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
2509 ;***** clr OFST-1,s ***** L0
2510 ;***** clrb ***** C0
2511 0108 6b80 stab OFST-1,s
2512 ;***** ldab OFST-1,s ***** L0
2513 010a L7011:
2514 ; 220 pevent->OSEventTbl[i] = 0x00;
2516 010a ed81 ldy OFST+0,s
2517 ;***** ldab OFST-1,s ***** M4
2518 010c 87 clra
2519 010d 19ee leay d,y
2520 010f 6942 clr 2,y
2521 ; 219 for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
2523 0111 6280 inc OFST-1,s
2526 0113 e680 ldab OFST-1,s
2527 0115 c108 cmpb #8
2528 0117 25f1 blo L7011
2529 ; 222 }
2532 0119 1b83 leas 3,s
2533 011b 3d rts
2591 ; 238 void OSInit (void)
2591 ; 239 {
2592 switch .text
2593 011c _OSInit:
2595 011c 3b pshd
2596 00000002 OFST: set 2
2599 ; 243 OSTime = 0L; /* Clear the 32-bit system clock */
2601 ;***** ldd #0 ***** L0
2602 011d 87 clra
2603 011e c7 clrb
2604 011f 7c0a22 std _OSTime+2
2605 ;***** ldd #0 ***** L0
2606 ;***** clra ***** C0
2607 ;***** clrb ***** C0
2608 0122 7c0a20 std _OSTime
2609 ; 244 OSIntNesting = 0; /* Clear the interrupt nesting counter */
2611 ;***** clr _OSIntNesting ***** C0
2612 ;***** clra ***** C0
2613 0125 7a0aba staa _OSIntNesting
2614 ; 245 OSLockNesting = 0; /* Clear the scheduling lock counter */
2616 ;***** clr _OSLockNesting ***** C0
2617 ;***** clrb ***** C0
2618 0128 7b0ab9 stab _OSLockNesting
2619 ; 247 OSTaskCtr = 0; /* Clear the number of tasks */
2621 ;***** clr _OSTaskCtr ***** C0
2622 ;***** clrb ***** C0
2623 012b 7b0aac stab _OSTaskCtr
2624 ; 249 OSRunning = FALSE; /* Indicate that multitasking not started */
2626 ;***** clr _OSRunning ***** C0
2627 ;***** clra ***** C0
2628 012e 7a0aad staa _OSRunning
2629 ; 250 OSIdleCtr = 0L; /* Clear the 32-bit idle counter */
2631 ;***** ldd #0 ***** L0
2632 ;***** clra ***** C0
2633 ;***** clrb ***** C0
2634 0131 7c0ac7 std _OSIdleCtr+2
2635 ;***** ldd #0 ***** L0
2636 ;***** clra ***** C0
2637 ;***** clrb ***** C0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -