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

📄 os_cpu_a.lst

📁 stm32 ucos 精简移殖版本 不需作任何修改直接便可运行。包含串口 定时器
💻 LST
📖 第 1 页 / 共 3 页
字号:



ARM Macro Assembler    Page 1 


    1 00000000         ;*******************************************************
                       *************************************************
    2 00000000         ;                                               uC/OS-II
                       
    3 00000000         ;                                         The Real-Time 
                       Kernel
    4 00000000         ;
    5 00000000         ;                               (c) Copyright 1992-2006,
                        Micrium, Weston, FL
    6 00000000         ;                                          All Rights Re
                       served
    7 00000000         ;
    8 00000000         ;                                           Generic ARM 
                       Port
    9 00000000         ;
   10 00000000         ; File      : OS_CPU_A.ASM
   11 00000000         ; Version   : V2.86
   12 00000000         ; By        : Jean J. Labrosse
   13 00000000         ;
   14 00000000         ; For       : ARMv7M Cortex-M3
   15 00000000         ; Mode      : Thumb2
   16 00000000         ; Toolchain : RealView Development Suite
   17 00000000         ;             RealView Microcontroller Development Kit (
                       MDK)
   18 00000000         ;             ARM Developer Suite (ADS)
   19 00000000         ;             Keil uVision
   20 00000000         ;*******************************************************
                       *************************************************
   21 00000000         
   22 00000000         ;*******************************************************
                       *************************************************
   23 00000000         ;                                           PUBLIC FUNCT
                       IONS
   24 00000000         ;*******************************************************
                       *************************************************
   25 00000000         
   26 00000000                 EXTERN           OSRunning   ; External referenc
                                                            es
   27 00000000                 EXTERN           OSPrioCur
   28 00000000                 EXTERN           OSPrioHighRdy
   29 00000000                 EXTERN           OSTCBCur
   30 00000000                 EXTERN           OSTCBHighRdy
   31 00000000                 EXTERN           OSIntNesting
   32 00000000                 EXTERN           OSIntExit
   33 00000000                 EXTERN           OSTaskSwHook
   34 00000000         
   35 00000000         
   36 00000000                 EXPORT           OS_CPU_SR_Save ; Functions decl
                                                            ared in this file
   37 00000000                 EXPORT           OS_CPU_SR_Restore
   38 00000000                 EXPORT           OSStartHighRdy
   39 00000000                 EXPORT           OSCtxSw
   40 00000000                 EXPORT           OSIntCtxSw
   41 00000000                 EXPORT           OS_CPU_PendSVHandler
   42 00000000         
   43 00000000         ;*******************************************************
                       *************************************************
   44 00000000         ;                                                EQUATES
                       



ARM Macro Assembler    Page 2 


   45 00000000         ;*******************************************************
                       *************************************************
   46 00000000         
   47 00000000 E000ED04 
                       NVIC_INT_CTRL
                               EQU              0xE000ED04  ; Interrupt control
                                                             state register.
   48 00000000 E000ED22 
                       NVIC_SYSPRI14
                               EQU              0xE000ED22  ; System priority r
                                                            egister (priority 1
                                                            4).
   49 00000000 000000FF 
                       NVIC_PENDSV_PRI
                               EQU              0xFF        ; PendSV priority v
                                                            alue (lowest).
   50 00000000 10000000 
                       NVIC_PENDSVSET
                               EQU              0x10000000  ; Value to trigger 
                                                            PendSV exception.
   51 00000000         
   52 00000000         ;*******************************************************
                       *************************************************
   53 00000000         ;                                      CODE GENERATION D
                       IRECTIVES
   54 00000000         ;*******************************************************
                       *************************************************
   55 00000000         
   56 00000000                 AREA             |.text|, CODE, READONLY, ALIGN=
2
   57 00000000                 THUMB
   58 00000000                 REQUIRE8
   59 00000000                 PRESERVE8
   60 00000000         
   61 00000000         ;*******************************************************
                       *************************************************
   62 00000000         ;                                   CRITICAL SECTION MET
                       HOD 3 FUNCTIONS
   63 00000000         ;
   64 00000000         ; Description: Disable/Enable interrupts by preserving t
                       he state of interrupts.  Generally speaking you
   65 00000000         ;              would store the state of the interrupt di
                       sable flag in the local variable 'cpu_sr' and then
   66 00000000         ;              disable interrupts.  'cpu_sr' is allocate
                       d in all of uC/OS-II's functions that need to
   67 00000000         ;              disable interrupts.  You would restore th
                       e interrupt disable state by copying back 'cpu_sr'
   68 00000000         ;              into the CPU's status register.
   69 00000000         ;
   70 00000000         ; Prototypes :     OS_CPU_SR  OS_CPU_SR_Save(void);
   71 00000000         ;                  void       OS_CPU_SR_Restore(OS_CPU_S
                       R cpu_sr);
   72 00000000         ;
   73 00000000         ;
   74 00000000         ; Note(s)    : 1) These functions are used in general li
                       ke this:
   75 00000000         ;
   76 00000000         ;                 void Task (void *p_arg)
   77 00000000         ;                 {



ARM Macro Assembler    Page 3 


   78 00000000         ;                 #if OS_CRITICAL_METHOD == 3          /
                       * Allocate storage for CPU status register */
   79 00000000         ;                     OS_CPU_SR  cpu_sr;
   80 00000000         ;                 #endif
   81 00000000         ;
   82 00000000         ;                          :
   83 00000000         ;                          :
   84 00000000         ;                     OS_ENTER_CRITICAL();             /
                       * cpu_sr = OS_CPU_SaveSR();                */
   85 00000000         ;                          :
   86 00000000         ;                          :
   87 00000000         ;                     OS_EXIT_CRITICAL();              /
                       * OS_CPU_RestoreSR(cpu_sr);                */
   88 00000000         ;                          :
   89 00000000         ;                          :
   90 00000000         ;                 }
   91 00000000         ;*******************************************************
                       *************************************************
   92 00000000         
   93 00000000         OS_CPU_SR_Save
   94 00000000 F3EF 8010       MRS              R0, PRIMASK ; Set prio int mask
                                                             to mask all (excep
                                                            t faults)
   95 00000004 B672            CPSID            I
   96 00000006 4770            BX               LR
   97 00000008         
   98 00000008         OS_CPU_SR_Restore
   99 00000008 F380 8810       MSR              PRIMASK, R0
  100 0000000C 4770            BX               LR
  101 0000000E         
  102 0000000E         ;*******************************************************
                       *************************************************
  103 0000000E         ;                                          START MULTITA
                       SKING
  104 0000000E         ;                                       void OSStartHigh
                       Rdy(void)
  105 0000000E         ;
  106 0000000E         ; Note(s) : 1) This function triggers a PendSV exception
                        (essentially, causes a context switch) to cause
  107 0000000E         ;              the first task to start.
  108 0000000E         ;
  109 0000000E         ;           2) OSStartHighRdy() MUST:
  110 0000000E         ;              a) Setup PendSV exception priority to low
                       est;
  111 0000000E         ;              b) Set initial PSP to 0, to tell context 
                       switcher this is first run;
  112 0000000E         ;              c) Set OSRunning to TRUE;
  113 0000000E         ;              d) Trigger PendSV exception;
  114 0000000E         ;              e) Enable interrupts (tasks will run with
                        interrupts enabled).
  115 0000000E         ;*******************************************************
                       *************************************************
  116 0000000E         
  117 0000000E         OSStartHighRdy
  118 0000000E 481D            LDR              R0, =NVIC_SYSPRI14 ; Set the Pe
                                                            ndSV exception prio
                                                            rity
  119 00000010 F04F 01FF       LDR              R1, =NVIC_PENDSV_PRI
  120 00000014 7001            STRB             R1, [R0]



ARM Macro Assembler    Page 4 


  121 00000016         
  122 00000016 2000            MOVS             R0, #0      ; Set the PSP to 0 
                                                            for initial context
                                                             switch call
  123 00000018 F380 8809       MSR              PSP, R0
  124 0000001C         
  125 0000001C 481A            LDR              R0, =OSRunning 
                                                            ; OSRunning = TRUE
  126 0000001E 2101            MOVS             R1, #1
  127 00000020 7001            STRB             R1, [R0]
  128 00000022         
  129 00000022 481A            LDR              R0, =NVIC_INT_CTRL ; Trigger th
                                                            e PendSV exception 
                                                            (causes context swi
                                                            tch)
  130 00000024 F04F 5180       LDR              R1, =NVIC_PENDSVSET
  131 00000028 6001            STR              R1, [R0]
  132 0000002A         
  133 0000002A B662            CPSIE            I           ; Enable interrupts
                                                             at processor level
                                                            
  134 0000002C         
  135 0000002C         OSStartHang
  136 0000002C E7FE            B                OSStartHang ; Should never get 
                                                            here
  137 0000002E         
  138 0000002E         
  139 0000002E         ;*******************************************************
                       *************************************************
  140 0000002E         ;                               PERFORM A CONTEXT SWITCH
                        (From task level)
  141 0000002E         ;                                           void OSCtxSw
                       (void)
  142 0000002E         ;
  143 0000002E         ; Note(s) : 1) OSCtxSw() is called when OS wants to perf
                       orm a task context switch.  This function
  144 0000002E         ;              triggers the PendSV exception which is wh
                       ere the real work is done.
  145 0000002E         ;*******************************************************
                       *************************************************
  146 0000002E         
  147 0000002E         OSCtxSw
  148 0000002E 4817            LDR              R0, =NVIC_INT_CTRL ; Trigger th
                                                            e PendSV exception 

⌨️ 快捷键说明

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