2020-10-24

2023-05-16

 

;PendSV中断控制器地址
NVIC_INT_CTRL   EQU   0xE000Ed04 
;触发PendSV
NVIC_PENDSV_SET  EQU  0x10000000 
;PendSV优先级控制地址
NVIC_SYSPRI2    EQU   0xE000Ed22 
;PendSV设置为最低优先值255
NVIC_PENDSV_PRI  EQU  0x000000ff 


  RSEG    CODE:CODE(2)
  thumb

      IMPORT ygos_tcb_current
      IMPORT ygos_prio_current
      IMPORT ygos_prio_hig_ready
      IMPORT ygos_tcb_high_ready
      IMPORT ygos_os_runing
      IMPORT ygos_os_swtich_flag

    
    EXPORT ygos_interrupt_disable
ygos_interrupt_disable:
    MRS     R0, PRIMASK
    CPSID   I
    BX      LR

    EXPORT ygos_interrupt_enable
ygos_interrupt_enable:
    MSR     PRIMASK, R0
    BX      LR


    EXPORT PendSV_Handler
PendSV_Handler:
    ;关闭中断
    CPSID   I
            
    LDR     R0, = ygos_os_swtich_flag
    LDR     R1, [R0] 
    CMP     R1, #1    
    BEQ     OS_CPU_PendSVHandler_nosave       
    
    ;PSP => RO    
    MRS     R0, PSP

    ;通过寄存器R4-R11,一共是8个字的寄存器,占用空间是4*8=32byte
    SUBS    R0, R0, #0x20   
    ;保存寄存器R4-R11到PSP的地址    
    STM     R0, {R4-R11}
    
    ;加载ygos_tcb_current指针到R1
    LDR     R1, =ygos_tcb_current 
     ;加载R1的堆栈指针    
    LDR     R1, [R1]
    ;存储R0寄存器的值,到堆栈指针的位置
    STR     R0, [R1]                                          

OS_CPU_PendSVHandler_nosave:
    LDR     R0, =ygos_os_swtich_flag                                     
    MOVS    R1, #0
    STR    R1, [R0]

    ;ygos_prio_current = ygos_prio_hig_ready
    LDR     R0, =ygos_prio_current                                     
    LDR     R1, =ygos_prio_hig_ready
    LDRB    R2, [R1]
    STRB    R2, [R0]

    ;ygos_tcb_current = ygos_tcb_high_ready
    LDR     R0, =ygos_tcb_current                                       
    LDR     R1, =ygos_tcb_high_ready
    LDR     R2, [R1]
    STR     R2, [R0]
    
    ;R0加载
    LDR     R0, [R2]
     ;R4-R11的8个寄存器恢复到ygos_tcb_current的堆栈地址    
    LDM     R0, {R4-R11} 
    ;更新栈地址的指针到R0    
    ADDS    R0, R0, #0x20
    
    ;更新R0到PSP
    MSR     PSP, R0 
     ;栈地址为用户栈指针PSP
    ORR     LR, LR, #0x04    
    
    ;打开中断    
    CPSIE   I
    BX      LR  
    
    ;防止编译出现警告信息
    NOP     

    EXPORT ygos_start_high_ready
ygos_start_high_ready:
    ;设置中断优先级为最低
    LDR     R0, =NVIC_SYSPRI2                                 
    LDR     R1, =NVIC_PENDSV_PRI
    STRB    R1, [R0]
    
    ;PSP = 0
    MOVS    R0, #0                                             
    MSR     PSP, R0
    
    ;ygos_os_runing =1
    LDR     R0, =ygos_os_runing                                     
    MOVS    R1, #1
    STRB    R1, [R0]
    
    LDR     R0, =ygos_os_swtich_flag                                     
    MOVS    R1, #1
    STR     R1, [R0]
    
    
    ;触发pendsv异常
    LDR     R0, =NVIC_INT_CTRL                                  
    LDR     R1, =NVIC_PENDSV_SET
    STR     R1, [R0]
       
    BX LR
    
    ;防止编译出现警告信息
    NOP

    EXPORT os_task_switch
os_task_switch:
    ;触发pensv异常
    LDR     R0, =NVIC_INT_CTRL                              
    LDR     R1, =NVIC_PENDSV_SET
    STR     R1, [R0] 
    BX      LR
    
    ;防止编译出现警告信息
    NOP

    EXPORT os_task_switch_to
os_task_switch_to:

    LDR     R0, =ygos_os_swtich_flag                                     
    MOVS    R1, #1
    STR     R1, [R0]

    ;触发pensv异常
    LDR     R0, =NVIC_INT_CTRL                              
    LDR     R1, =NVIC_PENDSV_SET
    STR     R1, [R0] 
    BX      LR
    
    ;防止编译出现警告信息
    NOP
    END

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2020-10-24 的相关文章

  • 2020-10-22

    用C 实现MVC xff08 Model View Control xff09 模式介绍 益处 在我们的开发项目中使用MVC xff08 Model View Control xff09 模式的益处是 xff0c 可以完全降低业务层和应用表
  • 2020-02-23

    常用命令 xff1a cd xff1a 切换目录 xff1b ls xff1a 用于显示指定工作目录下之内容 xff1b pwd xff1b 显示工作目录所在位置 xff1b mkdir xff1a 创建目录 xff1b cp xff1a
  • 2020 CCF 非专业级别软件能力认证第一轮(CSP-S) 提高级 C++ 语言试题

    目录 一 选择题 xff1a 每题 2 分 xff0c 共 15 题 xff0c 30 分 在每小题给出的四个选项中 xff0c 只有一项是符合题目要求的 二 阅读程序 程序输入不超过数组或字符串定义的范围 xff1b 判断题正确填 3 x
  • 2020-08-09

    广西 河池学院 广西高校重点实验室培训基地 系统控制与信息处理重点实验室 本篇博客来自河池学院 智控无人机小组 写作时间 2020年8月9日 周报 一 了解了msOS系统的系统框架和页面显示 msOS是 1 基于 C 语言 xff0c 没有
  • 2020.9.14中国地质大学新生入学教育

    今天我听到的最关键的一点就是专业型硕士可以两年毕业 xff0c 而且没有学术要求 学硕正常毕业也没有学术要求 xff0c 学硕如果两年毕业就有学术要求 还有我这种定向的是享受不了校招的 xff0c 你自己注意了 下面是当时写的一些笔记 xf
  • 中国地质大学北京信息工程学院2020招生专业目录和导师

    中国地质大学北京信息工程学院2020招生专业目录和导师 304信息工程学院 081000信息与通信工程 01信号与信息处理 全日制 4 101思想政治理论 201英语一或202俄语 301数学一 860数字电子技术 1 模拟电子技术 2 C
  • 2020-10-19

    OpenMP 使用介绍 OpenMP 基本概念 Open Multi Processing的缩写 xff0c 是一个应用程序接口 xff08 API xff09 xff0c 可用于显式指导多线程 共享内存的并行性 在项目程序已经完成好的情况
  • 2020.3

    1 项目中引用的dll如果为感叹号 xff0c 编译不能正常进行 xff0c 则将其dll下载放到exe运行文件夹下 xff0c 如还有其他错误提示 xff0c 试试将该dll的嵌入式互操作改为false
  • android10坑,Android 10 踩坑实录 👉 2020-01-20

    1 https联网限制 Accessing hidden method Lcom android org conscrypt OpenSSLSocketImpl gt setUseSessionTickets Z V light greyl
  • 【新书推荐】【2020】无人机系统设计

    从系统角度全面介绍无人飞机系统的设计和分析 Provides a comprehensive introduction to the design and analysis of unmanned aircraft systems with
  • 2020-11-03

    云计算五大特点 云计算 xff0c 是一种基于互联网的计算方式 xff0c 通过这种方式 xff0c 共享的软硬件资源和信息可以按需提供给计算机和其他设备 典型的云计算提供商往往提供通用的网络业务应用 xff0c 可以通过浏览器等软件或者其
  • 2020-12-22

    云计算主要包含哪些关键技术 xff1f 1 虚拟化技术 xff1a 云计算的虚拟化技术不同于传统的单一虚拟化 xff0c 它是涵盖整个IT架构的 xff0c 包括资源 网络 应用和桌面在内的全系统虚拟化 xff0c 它的优势在于能够把所有硬
  • 2020-11-10

    将Tomcat整合到Eclipse中 将Tomcat服务器整合到Eclipse工具中 xff0c 可以通过Eclipse启动 关闭tomcat服务器 xff0c 更重要的是 xff0c 可以非常方便的将在Eclipse中创建的Web项目发布
  • Docker下载与安装(2020)

    Docker下载与安装 Docker下载 进入网址下载稳定版 下载需要登录 xff0c 有账号就直接登录 xff0c 没有就注册 https hub docker com editions community docker ce deskt
  • CVPR 2020论文开源项目合集

    0 参考github地址 CVPR 2020论文开源项目合集 1 阅读随笔更新 2020 3 11 CVPR 2020 3D Pose Estimation阅读随笔1 xff1a Cross View Tracking for Multi
  • CVPR 2020: VIBE: Video Inference for Human Body Pose and Shape Estimation 阅读随笔

    论文地址 Github地址 以下为我的OneNote阅读笔记 xff0c 为图片格式 xff0c 留言 邮件可发原文件
  • 【亲测可用】kali linux 2020.1 设置为中文方法

    目录 0x00 提示0x01 更换更新源0x02 默认语言选择0x03 安装中文字体0x04 重启 xff0c 完成0x05 参考文章 kali 2020 1可用 进入我们的正题 xff0c 修改为中文的步骤 0x00 提示 由于kali
  • 2020-09-17

    在上篇推文中simulink bus总线创建方法详细介绍了基于matlab数据创建总线对象的方法 xff0c 这里介绍使用bus editor与data dictionary进行总线的创建管理 简单来说 xff0c data diction
  • 2020-11-13

    三角翼无人机制作指南设计 一 接线 飞控 xff1a pixhawk 915MHz电台 xff0c 空速计 xff0c GPS xff1b 动力 xff1a Tmotor电机 电调 F150KV700 舵机 xff1a S43A标准mini
  • 2020.2.22 排位赛 G - Bucket Brigade(BFS)

    Bucket Brigade 题面 题目分析 BFS模板题 代码 span class token macro property span class token directive keyword include span span cl

随机推荐

  • jQuery LigerUI 使用教程

    首页引入样式文件和js文件 xff1a lt link href 61 34 css ligerui all css 34 rel 61 34 stylesheet 34 type 61 34 text css 34 gt lt jquer
  • 依然迷茫的2016

    2016 xff0c 虽然毕业半年了 xff0c 但自己依然显得稚嫩 xff0c 没有褪去学生时代的幼稚 刚跨完年的我居然马上被骗子盯上了 xff0c 真是非常地不幸 xff0c 俗话说 xff0c 开门红 xff0c 我却倒霉来个开门霉
  • myeclipse部署tomcat问题

    MyEclipse部署tomcat时出现 xff1a Deployment is out of date due to changes in the underlying project contents You 39 ll need to
  • 关于逻辑分区和主分区的困惑

    原文链接 xff1a http www chiphell com thread 556678 1 1 html 问题 xff1a 我新配的机器 xff0c ssd 128g完全用于装系统 xff0c hdd用于存储 xff0c 我是在装完系
  • opencv实现几幅图像拼接成一整幅大图

    开始尝试merge函数 xff0c 具体如下 xff1a 定义四个矩阵A B C D 得到矩阵combine span style font size 18px include lt iostream gt include lt core
  • Python安装时import matplotlib.pyplot as plt报错

    安装matplotlib的时候可能会出现输入import matplotlib pyplot as plt出现报错的现象 xff0c 如下图所示 xff1a gt gt gt import matplotlib gt gt gt impor
  • 回文数和回文素数

    34 回文数 34 是一种数字 如 xff1a 98789 这个数字正读是98789 倒读也是98789 正读倒读一样 xff0c 所以这个数字就是回文数 1千以内 在自然数中 xff0c 最小的回文数是0 xff0c 其次是1 2 3 4
  • pragma pack对齐方式详细介绍

    为了加快读写数据的速度 xff0c 编译器采用数据对齐的方式来为每一个结构体分配空间 写在开头 本文有自己的原创也有转载的博文 xff0c 转载的部分一一列出来 xff0c 可能不全请见谅这里这里这里这里等等 更详细的解说 xff1a 在用
  • Qt学习笔记——打开并显示图片

    使用控件QLabel mainwindow h ifndef MAINWINDOW H define MAINWINDOW H include lt QMainWindow gt include lt QFileDialog gt incl
  • 可调恒流驱动LED电路分析

    https www icxbk com article detail aid 61 884 常规使用的pwm调亮度不仅会导致频闪 xff0c 而且在长时间使用的时候 xff0c 有损坏led的风险 xff0c 所以这次设计了一个恒流调亮度电
  • 如何在雷电模拟器里使用YiLu代理的动态ip?

    1在易路 程序 页面里随意添加一个应用 xff0c 请不要添加 雷电 到YiLu程序里 xff1b 2 YiLu设置 xff1a 点击YiLu 设置 页面 xff1b 选择 YiLu便携代理引擎 xff1b 选择 仅代理YiLu程序选项卡中
  • Freeman链码,差分码,归一化链码,归一化差分码

    Freeman链码是指用曲线起始点的坐标和边界点方向代码来描述曲线或边界的方法 xff0c 常被用来在图像处理 计算机图形学 模式识别等领域中表示曲线和区域边界 它是一种边界的编码表示法 xff0c 用边界方向作为编码依据 xff0c 为简
  • Matlab关联m文件与m文件关联设置

    MATLAB安装后经常出现m文件不能关联到matlab打开 xff0c 很烦恼 网上有一些设置教程 xff0c 比如 xff1a 链接一 按照链接方式一方式二设置后出现报错 修改注册表亦没用 下面链接 链接二 链接三 链接四 都没有效果 代
  • 图像处理形态学椭圆形模板结构元素的设计与实现

    在图像处理中 xff0c 经常要用到形态学操作 xff0c 形态学操作中的结构元素有很多 xff0c 如点结构 十字架结构 圆结构 矩形结构 椭圆形结构等等 本文将介绍椭圆形结构的实现 主要结合OpenCV实现 具体如下 xff1a inc
  • 3维空间旋转3维空间矩阵旋转及旋转变换

    本文将实现三维空间中的旋转和平移变换 xff0c 即将三维空间中的一个向量 或者一个空间图形 移动到另一个位置 如下图所示 xff1a 如上图所示 xff0c 由矢量一移动到矢量二 三维空间中的移动可以分为旋转和平移 设矢量一在坐标位置 X
  • 回归方程推导

  • Mac终端代理设置

    title Mac终端代理设置 tags mac 终端设置代理 打开终端执行 export http proxy 61 http 127 0 0 1 1087 export https proxy 61 http 127 0 0 1 108
  • Unity3D游戏作品大盘点

    原文链接 xff1a http www unitymanual com 404 html 经典重现 新仙剑OL 新仙剑OL 采用跨平台Unity3D引擎 xff0c 耗资数千万 xff0c 历时三年多 xff0c 由台湾大宇正版授权 xff
  • IAR编译器的ICF链接脚本

    测试代码如下 xff1a task c span class token macro property span class token directive keyword pragma span default variable attr
  • 2020-10-24

    PendSV中断控制器地址 NVIC INT CTRL EQU 0xE000Ed04 触发PendSV NVIC PENDSV SET EQU 0x10000000 PendSV优先级控制地址 NVIC SYSPRI2 EQU 0xE000