freertos的任务调度器的启动函数分析(根据源码使用)

volatile uint8_t * const pucFirstUserPriorityRegister = ( uint8_t * ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER );

通过宏pucFirstUserPriorityRegister=0xE000E400(根据宏名字,这是NVIC寄存器地址)

查手册知到

中断优先级设置寄存器的第一个寄存器。

ulOriginalPriority = *pucFirstUserPriorityRegister;保存第一个寄存器的值

获取寄存器有效位。

ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;

#define configMAX_SYSCALL_INTERRUPT_PRIORITY   \

 ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

configMAX_SYSCALL_INTERRUPT_PRIORITY=(5<<(8-4))

ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;//为7

   while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )

        {//portTOP_BIT_OF_BYTE=0x80

        /*有几个有效位,就执行几次*/

            ulMaxPRIGROUPValue--;//最后的值为7-4

            ucMaxPriorityValue <<= ( uint8_t ) 0x01;

        }

        /* Shift the priority group value back to its position within the AIRCR

        register. *///注释表明,将得到的值填入AIRCR寄存器,来确定如何分组。

        ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;//3左移8位

        ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;//仅保留3左移8位后的位为1

这里3左移8位,然后填入PRIGROUP;

    /* Make PendSV and SysTick the lowest priority interrupts. */因为用4位表示优先级,所以这里是15。

    portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;

    portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;

    void vPortSetupTimerInterrupt( void )

{

        /* Configure SysTick to interrupt at the requested rate. *///产生指定周期的中断

        portNVIC_SYSTICK_LOAD_REG =

( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;

        portNVIC_SYSTICK_CTRL_REG =

( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );

}

__asm void prvStartFirstTask( void )

{

    PRESERVE8

    /* Use the NVIC offset register to locate the stack. */

    ldr r0, =0xE000ED08

    ldr r0, [r0]

    ldr r0, [r0]

    /* Set the msp back to the start of the stack. */

    msr msp, r0

    /* Globally enable interrupts. */

    cpsie i

    cpsie f

    dsb

    isb

    /* Call SVC to start the first task. */

    svc 0

    nop

    nop

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/143664.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器补丁管理软件

随着漏洞的不断上升&#xff0c;服务器修补是增强企业网络安全的典型特征。作为业务关键型机器&#xff0c;计划服务器维护的停机时间无疑是一件麻烦事。但是&#xff0c;借助高效的服务器补丁管理软件&#xff08;如 Patch Manager Plus&#xff09;&#xff0c;管理员可以利用…

一朵华为云,如何做好百模千态?

点击关注 文丨刘雨琦、郝鑫 2005年华为提出网络时代的“All IP”&#xff0c;2011年提出数字化时代的“All Cloud”&#xff0c;2023年提出智能时代的“All Intelligence”。 截至目前&#xff0c;华为的战略升级经历了三个阶段。 步入智能化&#xff0c;需要迎接的困难依然…

AIGC快速入门体验之虚拟对象

AIGC快速入门体验之虚拟对象 一、什么是AIGC二、AIGC应用场景2.1 代码生成2.2 图片生成2.3 对象生成 三、AIGC虚拟对象3.1 AIGC完全免费工具3.2 快速获取对象3.3 给对象取名3.4 为对象写首诗3.5 和对象聊聊天 一、什么是AIGC AIGC是生成式人工智能&#xff08;Artificial Intel…

28 drf-Vue个人向总结-1

文章目录 前后端分离开发展示项目项补充知识开发问题浏览器解决跨域问题 drf 小tips设置资源root目录使用自定义的user表设置资源路径media数据库补充删除表中数据单页面与多页面模式过滤多层自关联后端提交的数据到底是什么jwt token登录设置普通的 token 原理使用流程解析 jw…

使用代理后pip install 出现ssl错误

window直接设置代理 httphttp://127.0.0.1:7890;httpshttp://127.0.0.1

8月最新修正版风车IM即时聊天通讯源码+搭建教程

8月最新修正版风车IM即时聊天通讯源码搭建教程。风车 IM没啥好说的很多人在找,IM的天花板了,知道的在找的都知道它的价值,开版好像就要29999,后端加密已解,可自己再加密,可反编译出后端项目源码,已增加启动后端需要google auth双重验证,pc端 web端 wap端 android端 ios端 都有 …

NPDP产品经理认证怎么报名?考试难度大吗?

PMDA&#xff08;Product Development and Management Association&#xff09;是美国产品开发与管理协会&#xff0c;在中国由中国人才交流基金会培训中心举办NPDP&#xff08;New Product Development Professional&#xff09;考试&#xff0c;该考试是产品经理国际资格认证…

吉利微型纯电,5 万元的快乐

熊猫骑士作为一款主打下层市场的迷你车型&#xff0c;吉利熊猫骑士剑指宝骏悦也&#xff0c;五菱宏光 MINI 等热门选手。 9 月 15 日&#xff0c;吉利熊猫骑士正式上市&#xff0c;售价为 5.39 万&#xff0c;限时优享价 4 .99 万元。价格和配置上对这个级别定位的战略车型有一…

【AIPOD案例操作教程】斜流风扇轮毂优化

AIPOD是由天洑软件自主研发的一款通用的智能优化设计软件&#xff0c;致力于解决能耗更少、成本更低、重量更轻、散热更好、速度更快等目标的工程设计寻优问题。针对工业设计领域的自动化程度低、数值模拟计算成本高等痛点&#xff0c;基于人工智能技术、自研先进的智能代理学习…

SEO方案尝试--Nuxtjs项目基础配置

Nuxtjs 最新版 Nuxt3 项目配置 安装nuxtjs 最新版 Nuxt3 参考官网安装安装插件安装ElementPlus页面怎么跳转&#xff0c;路由怎么实现404页面该怎么配置配置 网页的title 安装nuxtjs 最新版 Nuxt3 参考官网安装 安装插件 安装ElementPlus 安装 Element Plus 和图标库 # 首先&…

TikTok的伦理挑战:虚拟世界与现实世界的交汇

在数字时代&#xff0c;社交媒体平台已经不再只是一个信息传播的工具&#xff0c;它已经深刻地改变了我们的社交行为、价值观和伦理观。 而在这一领域的佼佼者之一&#xff0c;TikTok&#xff0c;正面临着伦理挑战&#xff0c;这是虚拟世界与现实世界交汇的产物。 本文将深入…

从技能需求到就业前景,了解前端和后端开发的优缺点和个人选择

文章目录 每日一句正能量一、引言前端开发后端开发 二、两者的对比分析三、技能转换和跨领域工作四&#xff1a;介绍全栈开发后记 每日一句正能量 命运决定的不是你的人生&#xff0c;能决定你人生的只有自己。 一、引言 前端和后端是Web开发中两个不可或缺的领域。前端开发主…

软考高级之系统架构师之计算机基础

概述 今天是9月28日&#xff0c;距离软考高级只剩37天&#xff0c;加油&#xff01; 概念 三种周期&#xff1a; Clock Cycle&#xff1a;时钟周期&#xff0c;CPU主频&#xff0c;又称为时钟频率&#xff0c;时钟周期是时钟频率的倒数Instruction Cycle&#xff1a;指令周…

idea中maven项目打包成jar,报错没有主清单属性解决方法

使用idea自带的打包可能会出现一下问题 在pom.xml中引入下面的依赖&#xff0c;即可解决 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions&…

【算法】排序——插入排序及希尔排序

目录 前言 一、排序的概念及其应用 1.1排序的概念 1.2排序的应用 1.3常见的排序算法 二、插入排序的实现 基于插入排序的优化——希尔排序&#xff08;缩小增量排序 个人主页 代码仓库 C语言专栏 初阶数据结构专栏 Linux专栏 LeetCode刷题 算法专栏 前言 这…

七、装饰者模式

这里写自定义目录标题 1、项目需求2、解决方案13、解决方案24、装饰者模式定义5、装饰者模式原理6、装饰者模式解决上述需求7、装饰者模式在jdk应用的源码分析 1、项目需求 2、解决方案1 3、解决方案2 可以控制类的数量&#xff0c;不至于造成很多的类在增加或者删除调料种类…

力扣-349.两个数组的交集

Idea 使用两个哈希集合&#xff0c;其中一个用来存储第一个数组&#xff0c;第二个来存储两个数组的交集&#xff0c;因为集合自带去重功能&#xff0c;因此最后用数组来接收就好了 AC Code class Solution { public:vector<int> intersection(vector<int>& n…

十大排序——2.归并排序

这篇文章我们来讲一下十大排序中的归并排序。 目录 1.概述 2.代码实现 3.总结 1.概述 归并排序主要是运用了归并的思想。 下面具体的来讲一下归并排序的整个流程和思想。 首先&#xff0c;给你一个无序的数组&#xff0c;要求你对它进行归并排序。归并排序首先需要将这个…

Qt扩展-KDDockWidgets 的使用

KDDockWidgets 的使用 一、概述二、原理说明三、代码实例1. 项目简述2. 布局源码 一、概述 KDDockWidgets 的使用相对比较简单&#xff0c;建议直接参考 其提供的例子。 二、原理说明 在这种多窗口布局显示的使用最常用的就是这两个类&#xff0c; 也就是 MainWindow 和 Doc…

初识Java 10-1 集合

目录 泛型和类型安全的集合 基本概念 添加一组元素 打印集合 List Iterator&#xff08;迭代器&#xff09; 本笔记参考自&#xff1a; 《On Java 中文版》 在进行程序设计时我们会发现&#xff0c;程序总是会根据某些在运行时才能知道的条件来创建新的对象。这意味着&am…