zoukankan      html  css  js  c++  java
  • uc/os中断处理

    //c语言,基于x86处理器的uc/os-II开中断和关中断的洪定义
    #if OS_CRITICAL_METHOD==1
    #define OS_ENTER_CRITICAL() asm CLI;
    #define OS_EXIT_CRITICAL() asm STI;
    #endif

    #if OS_CRITICAL_METHOD==2
    #define OS_ENTER_CRITICAL() asm {PUSHF;CLI}
    #define OS_EXIT_CRITICAL() asm POPF
    #endif


    #if OS_CRITICAL_METHOD==3
    #define OS_ENTER_CRITICAL() asm (cpu_sr=OSCPUSaveSR())
    #define OS_EXIT_CRITICAL() asm (OSCPURestoreSR(cpu_sr))
    #endif


    //基于ARM 处理器的ucos-ii开中断和关中断洪定义由C 和汇编语言两部分组成
    #define OS_CPU-SR unsigned long
    #define os_ENTER_CRITICAL() {cpu_sr=INTS_OFF())
    #define OS_EXIT_CRITICAL() (if(cpu_sr==0) INTS_ON();}

    ;;;===OS_CPU_A.S汇编程序部分===
    EXPORT INTS_OFF
    EXPORT INTS_ON
    INTS_OFF
    mrs ro,cpsr; CPSR的值送人R0
    mov r1,r0; R0的值备份R1
    orr r1,r1,#0xC0 R1的bit7和bit6置1
    msr CPSR_cxsf,r1 将R1存入CPSR
    and r0,r0,#0x80 R0保存了IRQ原状态
    mov pc,lr 返回
    INTS_ON
    mrs r0,cpsr CPSR的值存入R0
    bic r0,r0,#0x80 清除IRQ标志
    msr CPSR_cxsf,r0 IRQ使能
    mov pc,lr 返回


    //ucos-ii进入和退出临界区的范例
    void OSIntEnter(void)
    {
    #if OS_CRITICAL_METHOD==3
    OS_CPU_SR cpu_sr; //为CPU状态寄存器分配存储区
    #endif
    OS_ENTER_CRITICAL();
    if(OSIntNesting<255)
    OSIntNesting++; //中断服务子程序嵌套计数之加1
    OS_EXIT_CRITICAL();
    }
    Live together,or Die alone!
  • 相关阅读:
    Chrony时间同步
    使用cfssl生成自签证书
    Docker运行时资源限制
    Docker的OverlayFS存储驱动
    Docker文件挂载总结
    Docker配置文件deamon.json详解
    Docker网络模式详解
    Dcoker命令使用详解
    Docker架构分解
    《数据采集和分析平台》笔记
  • 原文地址:https://www.cnblogs.com/hzhida/p/2395675.html
Copyright © 2011-2022 走看看