|
发表于 2009-1-4 17:09:11
|
显示全部楼层
to 16楼:
2\请问void OSSched(void) 中
OSNextTaskID < OS_TASKS && !(OSRdyTbl & (0x01<<OSNextTaskID)); 这条具体的意思,哪位大侠帮我分解一下
我也正在研究这个,是看了反汇编程序才看懂的,
for (OSNextTaskID=0;(OSNextTaskID < OS_TASKS) && !(OSRdyTbl & (0x01<<OSNextTaskID));OSNextTaskID++); //进行任务调度
这条语句的作用就是查找当前任务表OSRdyTbl中最高优先级别的任务,从bit0位开始查询,直到查完所有任务为止;
汇编程序:
//查找任务
unsigned char OSNextTaskID;
for ( OSNextTaskID = 0;
bbc: 40 e0 ldi r20, 0x00 ; 0
bbe: 22 2d mov r18, r2
bc0: 33 27 eor r19, r19
bc2: 61 e0 ldi r22, 0x01 ; 1
bc4: 70 e0 ldi r23, 0x00 ; 0
bc6: 20 fd sbrc r18, 0
bc8: 0e c0 rjmp .+28 ; 0xbe6 <_Z7OSSchedv+0x68>
bca: 4f 5f subi r20, 0xFF ; 255
bcc: 45 30 cpi r20, 0x05 ; 5
bce: 58 f4 brcc .+22 ; 0xbe6 <_Z7OSSchedv+0x68>
bd0: c9 01 movw r24, r18
bd2: 04 2e mov r0, r20
bd4: 02 c0 rjmp .+4 ; 0xbda <_Z7OSSchedv+0x5c>
bd6: 95 95 asr r25
bd8: 87 95 ror r24
bda: 0a 94 dec r0
bdc: e2 f7 brpl .-8 ; 0xbd6 <_Z7OSSchedv+0x58>
bde: 86 27 eor r24, r22
be0: 97 27 eor r25, r23
be2: 80 fd sbrc r24, 0
be4: f2 cf rjmp .-28 ; 0xbca <_Z7OSSchedv+0x4c>
OSNextTaskID < OS_MAX_TASKS && !(OSRdyTbl & (0x01<<OSNextTaskID));
OSNextTaskID++);
OSTaskRunningPrio = OSNextTaskID ;
be6: 34 2e mov r3, r20 |
|