zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【C#】枚举和字符串以及数字之间的互相转换
    MySQL中int(M)和tinyint(M)数值类型中M值的意义
    C# 将数组拼接为字符串 string.Join 的使用
    MySQL-locate()函数
    C# 4.0 dynamic用法,并且与 var, object的区别
    Go语言 go get 找不到 google.golang.org/protobuf/encoding/prototext 解决办法
    Go语言 中逗号ok模式
    MySQL数据库面试题(2020最新版)
    .Net Core 3.0开源可视化设计CMS内容管理系统建站系统
    SQL Server 全文搜索/全文索引
  • 原文地址:https://www.cnblogs.com/qiyuexin/p/12608642.html
Copyright © 2011-2022 走看看