⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtx_config.txt

📁 使用STR710的IIC接口对PCF8563时钟芯片的测试程序.采用KEIL UV3编译.使用了MDK3.05操作系统.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;;;400    
;;;401       /* Initialize general part of TCB */
;;;402       p_TCB->cb_type = TCB;
000280  e3a00000          MOV      r0,#0
000284  e5c40000          STRB     r0,[r4,#0]
;;;403       p_TCB->state   = READY;
000288  e3a00001          MOV      r0,#1
00028c  e5c40001          STRB     r0,[r4,#1]
;;;404       p_TCB->prio    = priority;
000290  e5c45002          STRB     r5,[r4,#2]
;;;405       p_TCB->p_lnk   = NULL;
000294  e3a00000          MOV      r0,#0
000298  e5840004          STR      r0,[r4,#4]
;;;406       p_TCB->p_rlnk  = NULL;
00029c  e5840008          STR      r0,[r4,#8]
;;;407       p_TCB->p_dlnk  = NULL;
0002a0  e584000c          STR      r0,[r4,#0xc]
;;;408       p_TCB->p_blnk  = NULL;
0002a4  e5840010          STR      r0,[r4,#0x10]
;;;409       p_TCB->delta_time    = 0;
0002a8  e1c401b4          STRH     r0,[r4,#0x14]
;;;410       p_TCB->interval_time = 0;
0002ac  e1c401b6          STRH     r0,[r4,#0x16]
;;;411       p_TCB->events  = 0;
0002b0  e1c401b8          STRH     r0,[r4,#0x18]
;;;412       p_TCB->waits   = 0;
0002b4  e1c401ba          STRH     r0,[r4,#0x1a]
;;;413    
;;;414       /* Initialize ARM specific part of TCB */
;;;415       p_TCB->full_ctx = full_context;
0002b8  e5c47021          STRB     r7,[r4,#0x21]
;;;416    
;;;417       /* Prepare a complete interrupt frame for first task start */
;;;418       if (p_TCB->priv_stack != 0) {
0002bc  e1d402b2          LDRH     r0,[r4,#0x22]
0002c0  e3500000          CMP      r0,#0
0002c4  0a000004          BEQ      |L1.732|
;;;419          /* User has provided a memory space for the stack. */
;;;420          stk = &p_TCB->stack[p_TCB->priv_stack>>2];
0002c8  e5940028          LDR      r0,[r4,#0x28]
0002cc  e1d412b2          LDRH     r1,[r4,#0x22]
0002d0  e1a01141          ASR      r1,r1,#2
0002d4  e0808101          ADD      r8,r0,r1,LSL #2
0002d8  ea000004          B        |L1.752|
;;;421       }
;;;422       else {
;;;423          /* Allocate the memory space for the stack. */
;;;424          p_TCB->stack = _alloc_box (m_stk);
                  |L1.732|
0002dc  e59f01fc          LDR      r0,|L1.1248|
0002e0  ef000001          SVC      0x1  ; formerly SWI
0002e4  e5840028          STR      r0,[r4,#0x28]
;;;425          /* Write to the top of stack. */
;;;426          stk = &p_TCB->stack[OS_STKSIZE];
0002e8  e5940028          LDR      r0,[r4,#0x28]
0002ec  e28080c8          ADD      r8,r0,#0xc8
;;;427       }
;;;428    
;;;429       /* Initial PC and default CPSR */
;;;430       *--stk = (U32)task_body;
                  |L1.752|
0002f0  e2480004          SUB      r0,r8,#4
0002f4  e1a08000          MOV      r8,r0
0002f8  e5806000          STR      r6,[r0,#0]
;;;431       i      = INITIAL_CPSR;
0002fc  e3a09141          MOV      r9,#0x40000010
;;;432    
;;;433       /* If a task in THUMB mode, set T-bit. */
;;;434       if ((U32)task_body & 1) {
000300  e3160001          TST      r6,#1
000304  0a000000          BEQ      |L1.780|
;;;435          i |= 0x00000020;
000308  e3899020          ORR      r9,r9,#0x20
;;;436       }
;;;437       *--stk = i;
                  |L1.780|
00030c  e2480004          SUB      r0,r8,#4
000310  e1a08000          MOV      r8,r0
000314  e5809000          STR      r9,[r0,#0]
;;;438    
;;;439       /* Write initial registers. */
;;;440       for (i = full_context ? 13 : 8; i; i--) {
000318  e3570000          CMP      r7,#0
00031c  0a000001          BEQ      |L1.808|
000320  e3a0000d          MOV      r0,#0xd
000324  ea000000          B        |L1.812|
                  |L1.808|
000328  e3a00008          MOV      r0,#8
                  |L1.812|
00032c  e1a09000          MOV      r9,r0
000330  ea000004          B        |L1.840|
;;;441          *--stk = 0;
                  |L1.820|
000334  e3a00000          MOV      r0,#0
000338  e2481004          SUB      r1,r8,#4
00033c  e1a08001          MOV      r8,r1
000340  e5810000          STR      r0,[r1,#0]
000344  e2499001          SUB      r9,r9,#1              ;440
                  |L1.840|
000348  e3590000          CMP      r9,#0                 ;440
00034c  1afffff8          BNE      |L1.820|              ;440
;;;442       }
;;;443    
;;;444       /* For "full_context" assign a void pointer to R0. */
;;;445       if (full_context) {
000350  e3570000          CMP      r7,#0
000354  0a000003          BEQ      |L1.872|
;;;446          *--stk = (U32)p_TCB->p_msg;
000358  e2481004          SUB      r1,r8,#4
00035c  e1a08001          MOV      r8,r1
000360  e594001c          LDR      r0,[r4,#0x1c]
000364  e5810000          STR      r0,[r1,#0]
;;;447       }
;;;448    
;;;449       /* Initial Task stack pointer. */
;;;450       p_TCB->tsk_stack = (U32)stk;
                  |L1.872|
000368  e5848024          STR      r8,[r4,#0x24]
;;;451    
;;;452       /* Task entry point. */
;;;453       p_TCB->ptask = task_body;
00036c  e584602c          STR      r6,[r4,#0x2c]
;;;454    
;;;455    #if (OS_STKCHECK == 1)
;;;456       /* Set a magic word for checking of stack overflow. */
;;;457       p_TCB->stack[0] = MAGIC_WORD;
000370  e59f0170          LDR      r0,|L1.1256|
000374  e5941028          LDR      r1,[r4,#0x28]
000378  e5810000          STR      r0,[r1,#0]
;;;458    #endif
;;;459    } /* end of os_init_context */
00037c  e8bd47f0          POP      {r4-r10,lr}
000380  e12fff1e          BX       lr
                          ENDP

                  __SWI_0 PROC
;;;464    void __swi(0) os_switch_tasks (P_TCB p_new);
;;;465    void __SWI_0                  (P_TCB p_new) {
000384  e92d4010          PUSH     {r4,lr}
000388  e1a04000          MOV      r4,r0
;;;466       /* Switch to next task (identified by "p_new"). Saving old and restoring */
;;;467       /* new context is written in assembly (module: Swi_RTX.s)                */
;;;468    
;;;469    #if (OS_STKCHECK == 1)
;;;470       if (tstclrb (&os_del_flag) == __FALSE) {
00038c  e59f0150          LDR      r0,|L1.1252|
000390  ebfffffe          BL       tstclrb
000394  e3500000          CMP      r0,#0
000398  1a00000f          BNE      |L1.988|
;;;471          /* Do not check if task has deleted itself. */
;;;472          if ((os_runtask->tsk_stack < (U32)os_runtask->stack) ||
00039c  e59f0110          LDR      r0,|L1.1204|
0003a0  e5900000          LDR      r0,[r0,#0]  ; os_runtask
0003a4  e5900024          LDR      r0,[r0,#0x24]
0003a8  e59f1104          LDR      r1,|L1.1204|
0003ac  e5911000          LDR      r1,[r1,#0]  ; os_runtask
0003b0  e5911028          LDR      r1,[r1,#0x28]
0003b4  e1500001          CMP      r0,r1
0003b8  3a000006          BCC      |L1.984|
;;;473              (os_runtask->stack[0] != MAGIC_WORD )) {
0003bc  e59f00f0          LDR      r0,|L1.1204|
0003c0  e5900000          LDR      r0,[r0,#0]  ; os_runtask
0003c4  e5900028          LDR      r0,[r0,#0x28]
0003c8  e5900000          LDR      r0,[r0,#0]
0003cc  e59f1114          LDR      r1,|L1.1256|
0003d0  e1500001          CMP      r0,r1
0003d4  0a000000          BEQ      |L1.988|
;;;474             os_stk_overflow ();
                  |L1.984|
0003d8  ebfffffe          BL       os_stk_overflow
;;;475          }
;;;476       }
;;;477    #endif
;;;478       os_runtask->full_ctx = __FALSE;
                  |L1.988|
0003dc  e3a00000          MOV      r0,#0
0003e0  e59f10cc          LDR      r1,|L1.1204|
0003e4  e5911000          LDR      r1,[r1,#0]  ; os_runtask
0003e8  e5c10021          STRB     r0,[r1,#0x21]
;;;479       os_runtask = p_new;
0003ec  e59f00c0          LDR      r0,|L1.1204|
0003f0  e5804000          STR      r4,[r0,#0]  ; os_runtask
;;;480       p_new->state = RUNNING;
0003f4  e3a00002          MOV      r0,#2
0003f8  e5c40001          STRB     r0,[r4,#1]
;;;481    #if (OS_ROBIN == 1)
;;;482       if (p_new->full_ctx == __TRUE) {
0003fc  e5d40021          LDRB     r0,[r4,#0x21]
000400  e3500001          CMP      r0,#1
000404  1a000001          BNE      |L1.1040|
;;;483          os_tsk_robin = p_new;
000408  e59f00dc          LDR      r0,|L1.1260|
00040c  e5804000          STR      r4,[r0,#0]  ; os_tsk_robin
;;;484       }
;;;485    #endif
;;;486       /* Tsk_Unlock */
;;;487       OS_UNLOCK();
                  |L1.1040|
000410  e3a00000          MOV      r0,#0
000414  e5100800          LDR      r0,[r0,#-0x800]
000418  e3800001          ORR      r0,r0,#1
00041c  e3a01000          MOV      r1,#0
000420  e5010800          STR      r0,[r1,#-0x800]
;;;488    } /* end of os_switch_tasks */
000424  e8bd4010          POP      {r4,lr}
000428  e12fff1e          BX       lr
                          ENDP

                  os_chk_robin PROC
;;;492    
;;;493    void os_chk_robin (void) {
00042c  e92d4010          PUSH     {r4,lr}
;;;494       /* Check if Round Robin timeout expired and switch to the next ready task.*/
;;;495       /* This function is called from the "os_clock_demon()" task scheduler.    */
;;;496    #if (OS_ROBIN == 1)
;;;497       P_TCB p_new;
;;;498    
;;;499       if (os_rdy.p_lnk != os_tsk_robin) {
000430  e59f00b8          LDR      r0,|L1.1264|
000434  e5900004          LDR      r0,[r0,#4]  ; os_rdy
000438  e59f10ac          LDR      r1,|L1.1260|
00043c  e5911000          LDR      r1,[r1,#0]  ; os_tsk_robin
000440  e1500001          CMP      r0,r1
000444  0a000007          BEQ      |L1.1128|
;;;500          os_robin_time = os_time + OS_ROBINTOUT;
000448  e59f00a4          LDR      r0,|L1.1268|
00044c  e1d000b0          LDRH     r0,[r0,#0]  ; os_time
000450  e2800005          ADD      r0,r0,#5
000454  e3c00801          BIC      r0,r0,#0x10000
000458  e59f1070          LDR      r1,|L1.1232|
00045c  e1c100b0          STRH     r0,[r1,#0]  ; os_robin_time
;;;501          return;
;;;502          }
;;;503       if (os_robin_time == os_time) {
;;;504          /* Round Robin timeout has expired. */
;;;505          os_robin_time += OS_ROBINTOUT;
;;;506          p_new = os_get_first (&os_rdy);
;;;507          os_put_prio ((P_XCB)&os_rdy, p_new);
;;;508          }
;;;509    #endif
;;;510    } /* end of os_chk_robin */
                  |L1.1120|
000460  e8bd4010          POP      {r4,lr}
000464  e12fff1e          BX       lr
                  |L1.1128|
000468  e59f0060          LDR      r0,|L1.1232|          ;503
00046c  e1d000b0          LDRH     r0,[r0,#0]            ;503  ; os_robin_time
000470  e59f107c          LDR      r1,|L1.1268|          ;503
000474  e1d110b0          LDRH     r1,[r1,#0]            ;503  ; os_time
000478  e1500001          CMP      r0,r1                 ;503
00047c  1a00000b          BNE      |L1.1200|             ;503
000480  e59f0048          LDR      r0,|L1.1232|          ;505
000484  e1d000b0          LDRH     r0,[r0,#0]            ;505  ; os_robin_time
000488  e2800005          ADD      r0,r0,#5              ;505
00048c  e3c00801          BIC      r0,r0,#0x10000        ;505
000490  e59f1038          LDR      r1,|L1.1232|          ;505
000494  e1c100b0          STRH     r0,[r1,#0]            ;505  ; os_robin_time
000498  e59f0050          LDR      r0,|L1.1264|          ;506
00049c  ebfffffe          BL       os_get_first          ;506
0004a0  e1a04000          MOV      r4,r0                 ;506
0004a4  e1a01004          MOV      r1,r4                 ;507
0004a8  e59f0040          LDR      r0,|L1.1264|          ;507
0004ac  ebfffffe          BL       os_put_prio           ;507
                  |L1.1200|
0004b0  eaffffea          B        |L1.1120|
                  |L1.1204|
0004b4  00000000          DCD      os_runtask
                  |L1.1208|
0004b8  00000000          DCD      ||.data||
                  |L1.1212|
0004bc  e0009000          DCD      0xe0009000
                  |L1.1216|
0004c0  00000000          DCD      os_clock_TCB
                  |L1.1220|
0004c4  000004ab          DCD      0x000004ab
                  |L1.1224|
0004c8  00008010          DCD      0x00008010
                  |L1.1228|
0004cc  00000000          DCD      os_clock_interrupt
                  |L1.1232|
0004d0  00000004          DCD      ||.data|| + 4
                  |L1.1236|
0004d4  00000000          DCD      os_active_TCB
                  |L1.1240|
0004d8  00000000          DCD      ||.bss.5||
                  |L1.1244|
0004dc  800000c8          DCD      0x800000c8
                  |L1.1248|
0004e0  00000130          DCD      ||.bss.5|| + 304
                  |L1.1252|
0004e4  0000000c          DCD      ||.data|| + 12
                  |L1.1256|
0004e8  e25a2ea5          DCD      0xe25a2ea5
                  |L1.1260|
0004ec  00000008          DCD      ||.data|| + 8
                  |L1.1264|
0004f0  00000000          DCD      os_rdy
                  |L1.1268|
0004f4  00000000          DCD      os_time
                          ENDP



                          AREA ||.data||, DATA, ALIGN=2

                  ||task_id@os_stk_overflow_0||
                          DCD      0x00000000
                  os_robin_time
                          DCB      0x00,0x00
                          DCB      0x00,0x00
                  os_tsk_robin
                          DCD      0x00000000
                  os_del_flag
                          DCB      0x00


                          AREA ||.constdata.1||, DATA, READONLY, ALIGN=2

                  os_maxtaskrun
                          DCW      0x0006
                          DCB      0x00,0x00
                  os_stackinfo
                          DCD      0x010000c8
                  os_clockrate
                          DCD      0x00002710
                  os_timernum
                          DCD      0x00000000
                  os_rrobin
                          DCD      0x00010005


                          AREA ||.bss.5||, NOINIT, ALIGN=3

                  m_tcb
                          % 304
                  m_stk
                          % 1616
                  os_active_TCB
                          % 24

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -