ucos cpu_a.asm 注释

EXPORT  CPU_SR_Save

 import:翻译为进口或引入,表明要调用的函数为外部文件定义

 export:翻译为出口或输出,表明该符号可以被外部模块使用,类似于C中的extern功能。

  

;********************************************************************************************************
;                                      CODE GENERATION DIRECTIVES
;********************************************************************************************************

        AREA |.text|, CODE, READONLY, ALIGN=2
        THUMB
        REQUIRE8
        PRESERVE8

1、AREA    
    语法格式:    
    AREA 段名 属性1 ,属性2 ,……    
    AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用“|”括起来,如:|1_test| 。    
    属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用的属性如下:    
    — CODE 属性:用于定义代码段,默认为READONLY 。    
    — DATA 属性:用于定义数据段,默认为READWRITE 。    
    — READONLY 属性:指定本段为只读,代码段默认为READONLY 。    
    — READWRITE 属性:指定本段为可读可写,数据段的默认属性为READWRITE 。    
    — ALIGN 属性:使用方式为ALIGN表达式。在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,表达式的取值范围为0~31,相应的对齐方式为2表达式次方。    
    — COMMON 属性:该属性定义一个通用的段,不包含任何的用户代码和数据。各源文件中同名的COMMON段共享同一段存储单元。 
    一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。    
    使用示例:    
    AREA Init ,CODE ,READONLY ;   该伪指令定义了一个代码段,段名为Init ,属性为只读。 

2、ENTRY    
    语法格式:    
    ENTRY    
    ENTRY伪指令用于指定汇编程序的入口点。在一个完整的汇编程序中至少要有一个ENTRY(也可以有多个,当有多个ENTRY时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个ENTRY(可以没有)。    
    使用示例:    
    AREA Init ,CODE ,READONLY    
    ENTRY ; 指定应用程序的入口点
;********************************************************************************************************
;                                    DISABLE and ENABLE INTERRUPTS
;
; Description: Disable/Enable interrupts.
;
; Prototypes : void  CPU_IntDis(void);
;              void  CPU_IntEn (void);
;********************************************************************************************************

CPU_IntDis
        CPSID   I
        BX      LR


CPU_IntEn
        CPSIE   I
        BX      LR
;********************************************************************************************************
;                                      CRITICAL SECTION FUNCTIONS
;
; Description : Disable/Enable interrupts by preserving the state of interrupts.  Generally speaking, the
;               state of the interrupt disable flag is stored in the local variable 'cpu_sr' & interrupts
;               are then disabled ('cpu_sr' is allocated in all functions that need to disable interrupts).
;               The previous interrupt state is restored by copying 'cpu_sr' into the CPU's status register.
;
; Prototypes  : CPU_SR  CPU_SR_Save   (void);
;               void    CPU_SR_Restore(CPU_SR  cpu_sr);
;
; Note(s)     : (1) These functions are used in general like this :
;
;                       void  Task (void  *p_arg)
;                       {
;                           CPU_SR_ALLOC();                     /* Allocate storage for CPU status register */
;                               :
;                               :
;                           CPU_CRITICAL_ENTER();               /* cpu_sr = CPU_SR_Save();                  */
;                               :
;                               :
;                           CPU_CRITICAL_EXIT();                /* CPU_SR_Restore(cpu_sr);                  */
;                               :
;                       }
;********************************************************************************************************

CPU_SR_Save
        MRS     R0, PRIMASK                     ; Set prio int mask to mask all (except faults)
        CPSID   I
        BX      LR


CPU_SR_Restore                                  ; See Note #2.
        MSR     PRIMASK, R0
        BX      LR
原文地址:https://www.cnblogs.com/qiyuexin/p/12608642.html