📄 test.lss
字号:
出口参数: 无
有关说明: OSIntEnter()和OSIntExit()要成对出现使用
创建时间: 2007年3月7日
修改时间:
************************************************************************************************************************/
void OSIntExit(void)
{
OS_ENTER_CRITICAL();
466: 0f b6 in r0, 0x3f ; 63
468: 0f 92 push r0
46a: 11 24 eor r1, r1
46c: f8 94 cli
if(OSIntNesting>0)
46e: 41 10 cpse r4, r1
{
OSIntNesting--; /*中断嵌套减1 */
470: 4a 94 dec r4
}
if(OSIntNesting == 0)
472: 44 20 and r4, r4
474: 51 f4 brne .+20 ; 0x48a
{
OSFindPrioHighRdy(); /*找出就绪表中优先级最高的任务*/
476: 0e 94 d4 00 call 0x1a8
if(OSPrioHighRdy != OSPrioCur)
47a: 53 14 cp r5, r3
47c: 31 f0 breq .+12 ; 0x48a
{
OS_EXIT_CRITICAL();
47e: 0f 90 pop r0
480: 0f be out 0x3f, r0 ; 63
482: 11 24 eor r1, r1
IntSwitch(); /*进行任务调度 */
484: 0e 94 c8 00 call 0x190
return;
488: 08 95 ret
}
}
OS_EXIT_CRITICAL();
48a: 0f 90 pop r0
48c: 0f be out 0x3f, r0 ; 63
48e: 11 24 eor r1, r1
490: 08 95 ret
492: 08 95 ret
00000494 <SIGNAL>:
}
/************************************************************************************************************************
函数名称: SIGNAL(SIG_OVERFLOW0)
函数原型: SIGNAL(SIG_OVERFLOW0)
函数功能: 定时器0溢出中断处理
入口参数: 无
出口参数: 无
有关说明: 用来为需要延时的任务进行任务延时
创建时间: 2007年3月3日
修改时间:
************************************************************************************************************************/
SIGNAL(SIG_OVERFLOW0)
{
OSIntEnter();
494: 0e 94 28 02 call 0x450
498: 61 e0 ldi r22, 0x01 ; 1
49a: 70 e0 ldi r23, 0x00 ; 0
49c: e0 e6 ldi r30, 0x60 ; 96
49e: f0 e0 ldi r31, 0x00 ; 0
4a0: 20 e0 ldi r18, 0x00 ; 0
4a2: 30 e0 ldi r19, 0x00 ; 0
4a4: 42 e0 ldi r20, 0x02 ; 2
Uint_8bit i;
for(i=0;i < OS_TASKS;i++) /*刷新各任务时钟 */
{
if(TCB[i].OSWaitTick && (TCB[i].OSWaitTick != 0xffff))
4a6: 82 81 ldd r24, Z+2 ; 0x02
4a8: 93 81 ldd r25, Z+3 ; 0x03
4aa: 00 97 sbiw r24, 0x00 ; 0
4ac: c9 f0 breq .+50 ; 0x4e0
4ae: 5f ef ldi r21, 0xFF ; 255
4b0: 8f 3f cpi r24, 0xFF ; 255
4b2: 95 07 cpc r25, r21
4b4: a9 f0 breq .+42 ; 0x4e0
{
TCB[i].OSWaitTick--;
4b6: 01 97 sbiw r24, 0x01 ; 1
4b8: 82 83 std Z+2, r24 ; 0x02
4ba: 93 83 std Z+3, r25 ; 0x03
if(TCB[i].OSWaitTick == 0) /*当任务时钟到时,必须是由定时器减时的才行*/
4bc: 89 2b or r24, r25
4be: 81 f4 brne .+32 ; 0x4e0
{
OSRdyTbl |= (0x01<<i); /*使任务可以重新运行 */
4c0: cb 01 movw r24, r22
4c2: 02 2e mov r0, r18
4c4: 02 c0 rjmp .+4 ; 0x4ca
4c6: 88 0f add r24, r24
4c8: 99 1f adc r25, r25
4ca: 0a 94 dec r0
4cc: e2 f7 brpl .-8 ; 0x4c6
4ce: 28 2a or r2, r24
OSIntSchedReq(); /*中断中要求切换任务 */
4d0: 0f b6 in r0, 0x3f ; 63
4d2: 0f 92 push r0
4d4: 11 24 eor r1, r1
4d6: f8 94 cli
4d8: 02 60 ori r16, 0x02 ; 2
4da: 0f 90 pop r0
4dc: 0f be out 0x3f, r0 ; 63
4de: 11 24 eor r1, r1
4e0: 41 50 subi r20, 0x01 ; 1
4e2: 2f 5f subi r18, 0xFF ; 255
4e4: 3f 4f sbci r19, 0xFF ; 255
4e6: 35 96 adiw r30, 0x05 ; 5
4e8: 47 ff sbrs r20, 7
4ea: dd cf rjmp .-70 ; 0x4a6
}
}
}
TCNT0=100;
4ec: 84 e6 ldi r24, 0x64 ; 100
4ee: 82 bf out 0x32, r24 ; 50
OSIntExit();
4f0: 0e 94 33 02 call 0x466
4f4: 08 95 ret
000004f6 <IdleTask>:
}
/************************************************************************************************************************
函数名称: void IdleTask(void)
函数原型: void IdleTask(void)
函数功能: 空闲任务,当其他任务没有就绪的时候运行
入口参数: 无
出口参数: 无
有关说明: 系统开始运行的时候是从运行空闲任务开始的。该任务不能删除
创建时间: 2007年3月3日
修改时间:
************************************************************************************************************************/
void IdleTask(void)
{
OSSched();
4f6: 0e 94 e7 00 call 0x1ce
while(1)
4fa: ff cf rjmp .-2 ; 0x4fa
000004fc <OSInit>:
{
}
}
/************************************************************************************************************************
函数名称: OInit
函数原型: void OInit (void)
函数功能: 初始化任务时钟和一些系统全局变量,建立空闲任务
入口参数: 无
出口参数: 无
有关说明:
创建时间: 2007年3月5日
修改时间:
************************************************************************************************************************/
void OSInit (void)
{
OSRdyTbl=0;
4fc: 22 24 eor r2, r2
OSIntNesting=0;
4fe: 42 2c mov r4, r2
TCN0Init();
500: 0e 94 1e 02 call 0x43c
OSTaskCreate(IdleTask,&Stack[Total_Stack_Size-1],OS_TASKS);
504: 43 e0 ldi r20, 0x03 ; 3
506: 63 e0 ldi r22, 0x03 ; 3
508: 72 e0 ldi r23, 0x02 ; 2
50a: 8b e7 ldi r24, 0x7B ; 123
50c: 92 e0 ldi r25, 0x02 ; 2
50e: 0e 94 47 00 call 0x8e
512: 08 95 ret
00000514 <Task0>:
}
/************************************************************************************************************************
函数名称: void Task0(void)
函数原型: void Task0(void)
函数功能: 任务0
入口参数: 无
出口参数: 无
有关说明:
创建时间: 2007年3月3日
修改时间:
************************************************************************************************************************/
void Task0(void)
{
//DDRA = 0xff;
//PORTA = 0x00;
//DDRA|=0X7E;
//PORTA|=0X20;
OSSemCreat(0,0);
514: 60 e0 ldi r22, 0x00 ; 0
516: 86 2f mov r24, r22
518: 0e 94 64 01 call 0x2c8
while(1)
{
OSTaskSemPend(0,0xffff);
51c: 6f ef ldi r22, 0xFF ; 255
51e: 7f ef ldi r23, 0xFF ; 255
520: 80 e0 ldi r24, 0x00 ; 0
522: 0e 94 70 01 call 0x2e0
526: fa cf rjmp .-12 ; 0x51c
00000528 <Task1>:
//PORTA = ~PORTA;
//PORTA|=0X10;
}
}
/************************************************************************************************************************
函数名称: void Task1(void)
函数原型: void Task1(void)
函数功能: 任务1
入口参数: 无
出口参数: 无
有关说明:
创建时间: 2007年3月3日
修改时间:
************************************************************************************************************************/
void Task1(void)
{
DDRB = 0xff;
528: 8f ef ldi r24, 0xFF ; 255
52a: 87 bb out 0x17, r24 ; 23
PORTB = 0xff;
52c: 88 bb out 0x18, r24 ; 24
OSSemCreat(1,0);
52e: 60 e0 ldi r22, 0x00 ; 0
530: 81 e0 ldi r24, 0x01 ; 1
532: 0e 94 64 01 call 0x2c8
while(1)
{
OSTaskSemPend(1,0xffff);
536: 6f ef ldi r22, 0xFF ; 255
538: 7f ef ldi r23, 0xFF ; 255
53a: 81 e0 ldi r24, 0x01 ; 1
53c: 0e 94 70 01 call 0x2e0
PORTB = ~PORTB;
540: 88 b3 in r24, 0x18 ; 24
542: 80 95 com r24
544: 88 bb out 0x18, r24 ; 24
546: f7 cf rjmp .-18 ; 0x536
00000548 <Task2>:
}
}
/************************************************************************************************************************
函数名称: void Task2(void)
函数原型: void Task2(void)
函数功能: 任务2
入口参数: 无
出口参数: 无
有关说明:
创建时间: 2007年3月3日
修改时间:
************************************************************************************************************************/
void Task2(void)
{
while(1)
{
OSTimeDly(200);
548: 88 ec ldi r24, 0xC8 ; 200
54a: 90 e0 ldi r25, 0x00 ; 0
54c: 0e 94 3f 01 call 0x27e
OSTaskSemPost(0);
550: 80 e0 ldi r24, 0x00 ; 0
552: 0e 94 0f 02 call 0x41e
OSTimeDly(200);
556: 88 ec ldi r24, 0xC8 ; 200
558: 90 e0 ldi r25, 0x00 ; 0
55a: 0e 94 3f 01 call 0x27e
OSTaskSemPost(1);
55e: 81 e0 ldi r24, 0x01 ; 1
560: 0e 94 0f 02 call 0x41e
564: f1 cf rjmp .-30 ; 0x548
00000566 <main>:
}
}
/************************************************************************************************************************
函数名称: int main(void)
函数原型: int main(void)
函数功能: 主函数
入口参数: 无
出口参数: 无
有关说明:
创建时间: 2007年3月3日
修改时间:
************************************************************************************************************************/
int main(void)
{
566: cf e5 ldi r28, 0x5F ; 95
568: d4 e0 ldi r29, 0x04 ; 4
56a: de bf out 0x3e, r29 ; 62
56c: cd bf out 0x3d, r28 ; 61
OSInit();
56e: 0e 94 7e 02 call 0x4fc
OSTaskCreate(Task0,&Stack[99],0);
572: 40 e0 ldi r20, 0x00 ; 0
574: 67 ed ldi r22, 0xD7 ; 215
576: 70 e0 ldi r23, 0x00 ; 0
578: 8a e8 ldi r24, 0x8A ; 138
57a: 92 e0 ldi r25, 0x02 ; 2
57c: 0e 94 47 00 call 0x8e
OSTaskCreate(Task1,&Stack[199],1);
580: 41 e0 ldi r20, 0x01 ; 1
582: 6b e3 ldi r22, 0x3B ; 59
584: 71 e0 ldi r23, 0x01 ; 1
586: 84 e9 ldi r24, 0x94 ; 148
588: 92 e0 ldi r25, 0x02 ; 2
58a: 0e 94 47 00 call 0x8e
OSTaskCreate(Task2,&Stack[299],2);
58e: 42 e0 ldi r20, 0x02 ; 2
590: 6f e9 ldi r22, 0x9F ; 159
592: 71 e0 ldi r23, 0x01 ; 1
594: 84 ea ldi r24, 0xA4 ; 164
596: 92 e0 ldi r25, 0x02 ; 2
598: 0e 94 47 00 call 0x8e
OSStartTask();
59c: 0e 94 6d 00 call 0xda
return 0;
}
5a0: 80 e0 ldi r24, 0x00 ; 0
5a2: 90 e0 ldi r25, 0x00 ; 0
5a4: 0c 94 d4 02 jmp 0x5a8
000005a8 <_exit>:
5a8: ff cf rjmp .-2 ; 0x5a8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -