|
对与 “建立一个属于自己的AVR的RTOS (作者:hjc800323)” 里面OSTaskRunningPrio ( R3 )使用的疑问
使用 WINAVR 20090313 编译
为了简单起见,我将任务一更改为如下:
源码:
void Task0(void)
{
unsigned int j=0;
DDRB = 0xff;
while(1)
{
//PORTB= PORTB+1;
//OSTimeDly(2);
OSRdyTbl &= ~(0x01<<OSTaskRunningPrio); //挂起当前任务
OSSched();
}
}
生成汇编:
@00000119: Task0
+00000119: 93CF PUSH R28 Push register on stack
+0000011A: 93DF PUSH R29 Push register on stack
153: DDRB = 0xff;
+0000011B: EF8F SER R24 Set Register
+0000011C: BB87 OUT 0x17,R24 Out to I/O location
159: OSRdyTbl &= ~(0x01<<OSTaskRunningPrio); //挂起当前任务
+0000011D: E0C1 LDI R28,0x01 Load immediate
+0000011E: E0D0 LDI R29,0x00 Load immediate
+0000011F: 01CE MOVW R24,R28 Copy register pair
+00000120: C002 RJMP PC+0x0003 Relative jump
+00000121: 0F88 LSL R24 Logical Shift Left
+00000122: 1F99 ROL R25 Rotate Left Through Carry
+00000123: 943A DEC R3 Decrement
+00000124: F7E2 BRPL PC-0x03 Branch if plus
+00000125: 9580 LAT R24 Load and Toggle
+00000126: 2228 AND R2,R24 Logical AND
162: OSSched();
+00000127: DF2D RCALL PC-0x00D2 Relative call subroutine
+00000128: CFF6 RJMP PC-0x0009 Relative jump
发现编译后,是直接使用R3的, 这样一来就导致R3被改变了,
请问,是不是编译的什么地方有问题??谢谢! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|