FreeRTOS对系统异常优先级寄存器的PendSV和SysTick 的优先级设置过程

2023-05-16

为什么要设置PendSV为最低优先级?
应用程序执行SVC 时都是希望所需的请求立即得到响应。 PendSV 则不同,它是可以像普通的中断一样被抢占挂起的(不像SVC 那样会上访)。
操作系统 可以利用它“缓期执行”一个异常,一直到其它重要的任务完成后才执行动作
PendSV是为系统设备而设的“可悬挂请求”(pendable request)。
1)上下文切换 不能在中断中进行,会导致中断延期。为了解决这个问题,使用 PendSV。PendSV可以挂起,也就是等到别的 ISR结束后缓期执行。
2)为了实现缓期执行PendSV,PendSV一定要被设置为最低优先级的异常

如何设置PendSV?
看下图,对于系统异常,可编程的在编号4—15:
在这里插入图片描述
在这里插入图片描述
对于PendSV存储优先级的这个字节,其地址在0XE000_ED22,而寄存器的地址在0XE000_ED20,因此要做一些左移位操作
在这里插入图片描述
下图可知,是stm32f1X用了4个位来分配抢占优先级和子优先级
在这里插入图片描述
下图可知,configLIBRARY_LOWEST_INTERRUPT_PRIORITY为15 ,因为分组是4,即4个位都作为抢占优先级,有0—15,在中断中,数字越小优先级越高,所以15这个数字是最低优先级,用十六进制表示就是0x0000 000f。
对于configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS),_其中NVIC_PRIO_BITS 为4 ,所以就是configLIBRARY_LOWEST_INTERRUPT_PRIORITY <<4,也就是15<<4即
0x0000 000f<<4,结果为0x0000 00f0,即移到了最低字节的最高4位。
那么configKERNEL_INTERRUPT_PRIORITY=0x0000 00f0;
在这里插入图片描述
下图可知,
( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) 左移16位后取别名portNVIC_PENDSV_PRI,代表0x 00f0 0000
( uint32_t ) configKERNEL_INTERRUPT_PRIORITY )左移24位后取别名
portNVIC_SYSTICK_PRI,代表0x f000 0000
在这里插入图片描述

再看下图:portNVIC_SYSPRI2_REG分别和portNVIC_PENDSV_PRI,portNVIC_SYSTICK_PRI按位或,这就是置位,即把优先级15写入对应的字节,0XE000_ED22(PendSV)处和0XE000_ED23(sysTick)处,
在这里插入图片描述
因为采用的是小端存储,即高地址对应高字节,低地址对应低字节,如下图在这里插入图片描述

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

FreeRTOS对系统异常优先级寄存器的PendSV和SysTick 的优先级设置过程 的相关文章

  • SRE-Google运维解密随记-4

    自动化系统的演进 草率地进行自动化可能在解决问题的同时产生出其他问题 因此 xff0c 虽然我们认为在大多数情况下以软件为基础的自动化是优于手动操作的 xff0c 但是比 这两个选择更好的方案是一个不需要这些的系统设计一个自治的系统 或者换
  • linux下查看wwn号

    linux终端命令行中通过 cat sys class fc host host port name 命令查看wwn号即可 cat sys class fc host host port name
  • Linux系统权限集中管理项目案例实践

    目录 1 1 etc syduoers配置语法注意事项 1 2 etc sudoers配置文件别名知识 1 3 在 etc sudoers配置文件中 xff0c 别名和配置语法的对应关系表 1 4 利用别名配置授权实践案例 2 企业环境中用
  • 故障记录-磁盘性能下降导致节点触发迁移

    2023 03 11 11 28 52 012 ERROR 139673393420032 send ZMQ message to tcp 9765 failed 34 action 34 34 get pool status 34 34
  • gsch和redirfs模块导致系统hang或者重启 。

    Trend Micro Deep Security Agent 与Gluster 文件系统不兼容导致夯机 modules 34 gsch and redirfs 34 causing frequent kernel panic Trend
  • RedHat Linux系统故障修复—— grub引导、MBR损坏修复过程

    一 故障问题 MBR损坏是一种非常常见的错误 xff0c 两种情况 xff1a 1 MBR文件损坏 2 grub目录被误删除 1 首先 xff0c MBR是安装在硬盘的第一个扇区上占用了512个字节 xff0c 其中前446字节是bootl
  • 在救援模式下收集 sosreport

    问题 如何在救援模式下收集 sosreport xff1f 对于无法正常启动的操作系统 xff0c 如何收集 sosreport xff1f Red Hat Enterprise Linux 系统无法启动 当技术支持人员需要相关信息来进行问
  • 在Linux系统救援环境中实现联网

    环境 救援环境下的红帽企业 Linux 5 6 7 8 9 问题 生成了 sosreport 在初始救援环境设置期间未启用网络 解决方案 使用 IP 命令套件 iproute 包 xff1a 1 ip link 将显示连接到系统的可用设备
  • Rsa读取pem公钥和私钥

    1 把pem文件用text打开 xff0c 把开头和结尾的begin和end内容删去 xff0c 只留下字符串内容 xff1b 2 用流读取文件中的字符串 xff1b 3 用以下代码生成公钥和私钥对象 xff1b public static
  • 当 rsync/scp 不可用时,从系统传输文件或者 sosreport。

    环境 红帽企业 Linux 5 x红帽企业 Linux 6 x红帽企业 Linux 7 x 问题 文件需要转移到另一个系统 xff0c 但是ssh和rsync未设置和 或允许 一个sosreport需要转移到另一个系统 红帽企业 Linux
  • 如何配置Linux操作系统内DNS配置不被DHCP自动更新

    问题原因 NetworkManager是一个软件工具 xff0c 旨在简化计算机网络的使用 NetworkManager可用于基于Linux内核和其他类Unix操作系统 目前主流Linux操作系统都使用NetworkManager进行网络自
  • 2021-09-27

    虚拟环境中用pip下载安装包却安装到base环境解决方案 原因解决方案 遇到的问题 xff1a windows环境下进入虚拟环境 xff0c 使用pip install指令安装包时发现没有安装到虚拟环境下 xff0c 而是安装到了base环
  • 网络服务(Neutron)安装配置 ,这一篇就够了!

    实验目标 OpenStack Networking xff08 neutron xff09 xff0c 允许创建 插入接口设备 xff0c 这些设备由其它的OpenStack服务管理 插件式的实现可以容纳不同的网络设备和软件 xff0c 为
  • ssh服务和日志的基本常识

    查看网桥 brctl show 创建链接 ln s mnt dir file mnt lianjie 1 查看进程 gnome system monltor ps 当前shell的进程 A 所有的进程 a shell中所有的进程 xff0c
  • ESP8266基础详细使用

    前言 刚买一块ESP8266 琢磨一天才弄明白怎么使用 xff0c 小白第一次弄这个确实不太友好 xff0c 这里记录一下 xff0c 怕以后自己用到又忘了 xff0c 在物联网这一方面ESP8266还是特别实用的 材料准备 淘宝 xff0
  • nvm安装流程

    nvm nvm是管理node版本的工具 一般我们会负责多个项目 xff0c 不同项目有不同版本的node环境 xff0c 此时就需要nvm对node版本进行切换处理 1 首先卸载node 2 nvm下载 安装包下载地址 xff1a http
  • 树莓派 raspbian (各版本)换国内源

    xff08 看到师兄的博客后感觉还行 xff0c 所以自己也来写下 xff0c 第一次写 xff0c 所以不会编排 xff0c 有什么错误希望被指出 xff0c 谢谢 xff09 相信来寻找换源的人都和一样知道为什么要换国内更新源了吧 xf
  • 树莓派4b的i2c配置及wiringPi通信

    一 配置i2c设备 1 xff09 在终端中操作 xff0c 输入指令 sudo raspi config 2 xff09 然后会出现设置界面 xff0c 然后跟着如下图片操作 第一项 xff1a Change User Password
  • 树莓派驱动之设备树覆盖

    一 前言 由于是初学者 xff0c 所以对于一些操作需要记录下方便自己查找 附上 xff1a 树莓派设备树官网 我只从官网上了解到一点点内容 xff0c 还有许多没看懂的和还没学的 一个常规的Arm Linux设备树 xff0c 主要是由源
  • ConcurrentHashMap 常用方法

    void clear 从该映射中移除所有映射关系 boolean containsKey Object key 测试指定对象是否为此表中的键 boolean containsValue Object value 如果此映射将一个或多个键映射

随机推荐

  • .vscode中常用的配置文件

    文件 一 安装常用插件二 c cpp properties json文件三 settings json文件 一 安装常用插件 根据自己需要安装相应的插件 xff1a span class token number 1 span span c
  • 操作系统相关知识

    目录 一 嵌入式操作系统二 实时操作系统 xff08 RTOS xff09 三 Freertos 操作系统四 Linux xff08 操作系统 xff09 五 Linux 和 FreeRTOS操作系统的区别 xff08 面试中被问到 xff
  • 结构体对齐(全)

    目录 一 结构体对齐规则二 结构体位域对齐规则 一 结构体对齐规则 1 第一个成员在与结构体偏移量为0的地址处 xff1b 2 其他成员变量要与自身类型的整数倍地址处对齐 xff1b 3 结构体总大小为要与 处理器字节数与成员类型所占字节数
  • C语言自我实现模块化打印log

    在一个嵌入式稍微大些的工程中实现模块化控制打印输出信息是很有必要的 xff0c 下面是模仿别人的实现的模块化打印 xff0c 需要时可以根据下面的实现代码去修改满足自己所需要的 xff01 xff01 xff01 span class to
  • 卸载ibus后无法进入桌面的解决方法

    过程 一 复现现象 xff1a 二 复现原因 xff1a 三 解决方法 xff1a 重新安装ubuntu桌面 一 复现现象 xff1a 开机进入 Ubuntu xff0c 输入密码成功后一直卡在这个页面 xff0c 无法进入 ubuntu
  • Linux内核之 printk 打印

    Linux内核之 printk 打印 前言一 printk 介绍1 printk 消息级别2 内核 printk 文件 二 调整打印级别1 在 menuconfig 中修改2 在系统中修改 xff08 常用 xff09 三 使用示例四 查看
  • Linux ALSA 之四:Tinyalsa->Alsa Driver Flow分析

    Tinyalsa gt Alsa Driver Flow 一 概述二 Tinyalsa2 1 tinypcminfo2 2 tinymix2 3 tinyplay2 4 tinycap 三 Tinyalsa gt alsa driver f
  • Linux ALSA 之十:ALSA ASOC Machine Driver

    ALSA ASOC Machine Driver 一 Machine 简介二 ASoC Machine Driver2 1 Machine Driver 的 Platform Driver amp Platform Device 驱动模型2
  • Linux ALSA 之十一:ALSA ASOC Path 完整路径追踪

    ALSA ASOC Path 完整路径追踪 一 ASoc Path 简介二 ASoc Path 完整路径2 1 tinymix 设置2 2 完整路径 route 一 ASoc Path 简介 如前面小节所描述 xff0c ASoc 中 Ma
  • 【STM32】关于Clion+STM32cubeMX环境搭建过程中所遇到的一些问题·其一

    目录 一 前言 二 正文 stm32 cubemx的安装 建立工程 配置openOCD进行编译烧录 关于烧录失败的事 三 小结 四 参考文章 一 前言 近日在网上冲浪时无意间发现了稚晖君在知乎发布的一篇关于如何使用clion 43 stm3
  • 端口扫描 1

    TCP端口扫描是通过SYN数据包进行的 xff0c 用于扫描目标机器的端口上是否存在程序监听 xff0c 通常意义上 xff0c 普通个人机器上的某个端口如果有程序监听的话 xff0c 那么它一般是系统漏洞 由于TCP是一个有连接的可靠协议
  • linux Ubuntu终端快捷键

    终端操作快捷键 Tab 自动补全 Ctrl 43 a 光标移动到开始位置 Ctrl 43 e 光标移动到最末尾 Ctrl 43 k 删除此处至末尾的所有内容 Ctrl 43 u 删除此处至开始的所有内容 Ctrl 43 d 删除当前字符 C
  • Linux ALSA 之十二:ALSA ASOC Kcontrol

    ALSA ASOC Kcontrol 一 结构体 snd kcontrol new二 ASoC 系统定义的 kcontrol 宏2 1 SOC SINGLE2 2 SOC SINGLE TLV2 3 SOC DOUBLE2 4 Mixer
  • (2022.12.12 )完成mavros配置+PX4配置

    一 mavros 安装配置 在安装之前 xff0c 请先更新软件库 xff1a sudo apt get update sudo apt get upgrade 遇到问题 无法安全地用该源进行更新 xff0c 所以默认禁用该源 N 参见 a
  • 基于ROS平台的STM32小车--汇总

    一切为了实现利用ros通过串口控制小车简单运动 基于ROS平台的STM32小车 4 上位机控制器 https blog csdn net weixin 39752599 article details 86552511 下载串口通信的ROS
  • Docker容器可视化

    文章目录 本地安装X11界面工具 添加参数创建容器测试容器尝试运行Matplotlib绘制柱状图 参考 Docker容器中运行程序 xff0c 有时候需要显示容器中的图像 xff0c 或在容器中运行一些图形界面的软件 调用摄像头等 xff0
  • 什么是枚举

    什么是枚举 简单来说 xff0c 枚举就是一个类有有限个确定的对象 有限个 就不用解释了 xff0c 如果说枚举有无限个对象 xff0c 那它和普通的类又有什么区别呢 xff1f 确定的 就是指枚举类的所有对象都是不可变的 这里我给个例子解
  • Centos7如何安装sogo输入法

    安装epel依赖源 sudo yum install epel release xff1b 卸载 ibus软件 rpm e nodeps ibus 安装fcitx相关 yum y install fcitx fcitx pinyin fci
  • 安卓系统无线投屏到win10

    安卓系统无线投屏到win10 xff0c 在电脑上操作手机 共有两种方法 xff0c 第一种方法需要先使用数据线连接电脑 xff0c 再断开数据线使用 xff0c 第二种方法是使用安卓11的无线调试 xff0c 全程不需要数据线连接电脑 x
  • FreeRTOS对系统异常优先级寄存器的PendSV和SysTick 的优先级设置过程

    为什么要设置PendSV为最低优先级 xff1f 应用程序执行SVC 时都是希望所需的请求立即得到响应 PendSV 则不同 xff0c 它是可以像普通的中断一样被抢占挂起的 xff08 不像SVC 那样会上访 xff09 操作系统 可以利