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-12-08

    代码简介 xff1a python读取excel数据 xff0c 并汇总结果 xff0c 统计厂商个数 xff0c 每个厂商的版本个数 xff0c 提测型号种类 xff0c 厂商总的测试通过率 import xlrd import open
  • 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
  • 8、docker+k8s+kubesphere:nfs安装(2020-08-02更新)

    8 docker 43 k8s 43 kubesphere nfs安装 server端安装在node151 yum y span class token function install span nfs utils rpcbind 配置文
  • 2020 CCF 非专业级别软件能力认证第一轮(CSP-S) 提高级 C++ 语言试题

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

    这几天在做一个简单的随机抽取姓名的一个抽人的小页面 顺顺利利的 今天回来再打开看自己作死一样的一直找看看有没有什么bug 没想到真的找到一个 花了一个多小时才解决 其实最后才觉得是个比较细节的问题 是关于setInterval和setTim
  • 2020-11-23

    https blog csdn net guofei fly article details 104136008 utm medium 61 distribute pc relevant none task blog BlogCommend
  • 2020-10-24

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

    网格计算和云计算有相似之处 xff0c 特别是计算的并行与合作的特点 xff1b 但他们的区别也是明显的 主要有以下几点 xff1a 首先 xff0c 网格计算的思路是聚合分布资源 xff0c 支持虚拟组织 xff0c 提供高层次的服务 x
  • 2020-12-28

    大数据发展必备三个条件 大数据概念的横空出世 xff0c 有赖于短短几年出现的海量数据 据统计 xff0c 互联网上的数据每两年翻一番 xff0c 而目前世界上90 以上的数据都是最近几年才产生的 当然 xff0c 海量数据仅仅是 大数据
  • CVPR 2020 论文大盘点-语义分割篇

    图像分割应用广泛 xff0c 在CVPR 2020 论文中所占比例很高 xff0c 可说是一大热门 xff0c 有110多篇相关论文 xff0c 本文盘点CVPR 2020 所有语义分割 xff08 Semantic Segmentatio
  • 2020/2/20

    区域赛复现 xff1a 1小时 C 43 43 两章 xff1a 3小时 https www cnblogs com yrz001030 p 12340003 html 补了区域赛一题 xff1a 1小时 几何基础 43 2题 xff1a
  • 2020-11-12

    一 什么是PID PID控制器是工业过程控制中广泛采用的一种控制算法 xff0c 其特点是结构简单灵活 技术成熟 适应性强 P I D分别为比例 xff08 Proportion xff09 积分 xff08 Integral xff09
  • 【亲测可用】kali linux 2020.1 设置为中文方法

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

    在准备电赛的过程中 xff0c 做了一下去年的题 xff0c 本文将介绍我的方案及部分代码 xff0c 希望可以帮助到大家 一 我的装备 由于初学飞控所以主控用的是匿名的拓空者 xff0c 还有匿名的光流传感器 xff0c 北醒的激光雷达
  • 2020-09-17

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

    2020年可以说是我开始工作的第二年了 在第一年中我可以说了解了工作和组里的基本情况 xff0c 而这第二年就开始真正的加深学习了 还是以时间线一点点的慢慢讲吧 春节前我们一边工作一边准备年会 我们公司有个惯例那就是让每年最新入职的员工来主
  • 轻薄本用服务器的性能,高性能轻薄本推荐-高性能轻薄本排行榜2020

    近期有不少小伙伴们又购买笔记本的需求 xff0c 轻薄本的话在图形图像处理能力还有游戏体验上会比较好 xff0c 那么高性能轻薄本都有哪些呢 xff1f 小编为大家推荐几款性价比高 xff0c 有一定的图形图像处理能力的高性能轻薄本 xff
  • Matlab读取高光谱遥感数据.Mat 和 .tif(2020.12.27)

    Matlab读取高光谱遥感数据 1 高光谱遥感数据简介2 两个开源的高光谱遥感数据集3 高光谱遥感数据常用格式3 1 Mat3 2 Tif 4 Matlab读取高光谱遥感数据4 1 Matlab读取 Mat格式的高光谱遥感数据4 1 1 M
  • 2020-09-28

    通用异步收发器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff0c 是一种串行 异步 全双工的通信协议 xff0c 在嵌入式领域应用的非常广泛 UAR

随机推荐

  • 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