ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
39937 Топик полностью
YAM (25.09.2005 23:53, просмотров: 1) ответил Make_Pic на реестр чистить?
Нет, с ошибками компиляции 
Это исходник:
void CreateTask(struct task_struct *p,void(*fp)(ulong descriptor))
{
	p->pTask  = fp;
	p->Active = 0;
	p->run_list.next = 0;
	p->run_list.prev = 0;
	list_add(&p->run_list, &runqueue_head);
}

Это то, что "сделал" KEIL ARM
*** CODE SEGMENT '?PR?CreateTask?A?sheduler':
   34: void CreateTask(struct task_struct *p,void(*fp)(ulong descriptor))
 00000000  E92D4000  STMDB       R13!,{LR}
 00000004  E1A03001  MOV         R3,R1 ; fp
 00000008  ---- Variable 'fp' assigned to Register 'R3' ----
 00000008  E1A02000  MOV         R2,R0 ; p
 0000000C  ---- Variable 'p' assigned to Register 'R2' ----
   36:     p->pTask  = fp;
 0000000C  E1A01003  MOV         R1,R3 ; fp
 00000010  E1A00002  MOV         R0,R2 ; p
 00000014  E5801000  STR         R1,[R0,#0x0] ; p	<--- Типа сохраняем fp
   37:     p->Active = 0;
 00000018  E3A01000  MOV         R1,#0x0
 0000001C  E1A00002  MOV         R0,R2 ; p
 00000020  E5801004  STR         R1,[R0,#0x4]		<--- Типа сохраняем Active = 0
   38:     p->run_list.next = 0;
 00000024  E3A01000  MOV         R1,#0x0
 00000028  E1A00002  MOV         R0,R2 ; p
 0000002C  E5801000  STR         R1,[R0,#0x0] ; p	<--- УПС, а тут, то было fp!!!!!
   39:     p->run_list.prev = 0;
 00000030  E3A01000  MOV         R1,#0x0
 00000034  E1A00002  MOV         R0,R2 ; p
 00000038  E5801004  STR         R1,[R0,#0x4]		<--- УПС, а тут, то было Active!!!!!
   40:     list_add(&p->run_list, &runqueue_head);
 0000003C  E1A00002  MOV         R0,R2 ; p
 00000040  E5101000  LDR         R1,=runqueue_head ; runqueue_head
 00000044  EBFFFFED  BL          list_add?A  ; Targ=0x0
   41: }
 00000048  E8BD0008  LDMIA       R13!,{R3}
 0000004C  E12FFF13  BX          R3
 00000050          ENDP ; 'CreateTask?A'


Это IAR 4.30A, вопросов просто нет.....
     41          void CreateTask(struct task_struct *pt,void(*fp)(ulong descriptor))
     42          {
     43          	pt->pTask  = fp;
   \                     CreateTask:
   \   00000000   081080E5           STR         R1,[R0, #+0x8]
     44          	pt->Active = 0;
   \   00000004   0010A0E3           MOV         R1,#+0
   \   00000008   0C1080E5           STR         R1,[R0, #+0xC]
     45          	pt->run_list.next = 0;
   \   0000000C   001080E5           STR         R1,[R0, #+0]
     46          	pt->run_list.prev = 0;
   \   00000010   041080E5           STR         R1,[R0, #+0x4]
     47          	list_add(&pt->run_list, &runqueue_head);
   \   00000014   ........           LDR         R1,??DataTable3    ;; runqueue_head
   \   00000018   002091E5           LDR         R2,[R1, #+0]
   \   0000001C   040082E5           STR         R0,[R2, #+0x4]
   \   00000020   002080E5           STR         R2,[R0, #+0]
   \   00000024   041080E5           STR         R1,[R0, #+0x4]
   \   00000028   000081E5           STR         R0,[R1, #+0]
     48          }
   \   0000002C   1EFF2FE1           BX          LR                 ;; return