阅读:3124回复:4
ucos2中的OSTickISR的一问
1。我现在的任务调度没有用OSTimeDly类似的时间函数,而只采用OSMboxPend,OSMboxPost
等信号量的方式,是不是说明我可以不用OStickISR? 2。书上说OSTickISR应该每秒钟发生10-100次,如果每秒发生一次可以码? 有什么影响(会影响任务的切换时间,只用信号量的方式)? |
|
沙发#
发布于:2003-06-30 21:32
1。我现在的任务调度没有用OSTimeDly类似的时间函数,而只采用OSMboxPend,OSMboxPost 第一:OSTickISR一定要的,因为它要调用OSTimeTick(),而这个函数是每一个节拍就对任务块里的OSTCBDLY减1; 第二:当让可以设置成每秒种发生一次的。这个数字越小,系统花费更少,当然罗,可能有些功能就不太爽罗! :) |
|
板凳#
发布于:2003-06-30 23:13
OSTimeTick()这个函数是每一个节拍就对任务块里的OSTCBDLY减1,
我的理解是任务的启动可以是OSTCBDLY减到0,也可以是得到信号量(邮箱等),如果我的任务只有信号量触发,跟OSTCBDLY没有关系, 就可以不用OStimeTick,不知这种理解哪里不对,请指教? |
|
地板#
发布于:2003-07-30 12:04
你的理解是正确的,如果在你的程序中没有用到和时间有关的功能,如Time函数,延时等,就可以不用OSTimeTick。
|
|
地下室#
发布于:2005-01-17 16:50
请教各位牛人,小弟这个uc/os2移植问题搞了半个月了,还未搞定,BOSS脸上要下雨了。
我在OSStart()的起动任务里调用的Isr_Init。 void Isr_Init(void) //中断初始化 { rINTCON = 0x5; //中断控制寄存器设置 rINTMOD=0x0; // All=IRQ mode pISR_TICK = (int)OSTickISR; //时钟节拍中断向量处填入中断服务程序() rPCONG = rPCONG | 0xff00; //GPG4、5、6、7设为中断引脚 rPUPG = rPUPG & 0x0f; //GPG4、5、6、7上拉电阻有效 rEXTINT=0x0; //低电平触发 rINTMSK=~(BIT_GLOBAL|BIT_TICK); //中断有效 rTICNT=127+(1<<7); // 时间滴答计数寄存器 } ;os_cpu_a.s里的4个函数只有下面这个函数移植的有点问题,多任务系统总是进入空闲任务等待或跑飞了. ;程序起动后,我在OSTickISR中设断点能进入. OSTickISR STMFD sp!, {r4} LDR r4, =LINK_SAVE STR lr, [r4] ; LINK_SAVE = lr_irq MRS lr, spsr STR lr, [r4, #4] ; PSR_SAVE = spsr_irq LDMFD sp!, {r4} ORR lr, lr,#0x80 ; Mask irq for context switching before MSR cpsr_cxsf, lr ; returning back from irq mode. SUB sp, sp, #4 ; Space for PC STMFD sp!, {r0-r12, lr} LDR r4, =LINK_SAVE LDR lr, [r4, #0] SUB lr, lr, #4 ; lr = LINK_SAVE - 4, STR lr, [sp, #(14*4)] ; the return address for pc. LDR r4, [r4, #4] ; r4 = PSR_SAVE, STMFD sp!, {r4} ; CPSR of the task LDR r4, =OSTCBCur LDR r4, [r4] STR sp, [r4] ; OSTCBCur -> stkptr = sp ; BL DmpStk BL OSIntEnter BL OSTimeTick BL OSIntExit ; BL DmpStk ; LDR r4, =OSTCBHighRdy LDMFD sp!, {r4} ; pop new task cpsr MSR cpsr_cxsf, r4 LDMFD sp!, {r0-r12,lr,pc} ; pop new task r0-r12,lr & pc EXPORT DmpStk DmpStk LDR r0, =Dump_Pool MOV r1, sp MOV r2, sp ADD r2, r2, #64 DmpLoop LDR r3, [r1] STR r3, [r0] ADD r0, r0, #4 ADD r1, r1, #4 CMP r1, r2 BNE DmpLoop MOV pc, lr |
|