生成函数

周期,多久触发一次定时器(从定时器启动开始计算)  触发什么呢? 回调函数被调用,被谁调用呢

1,tick中断去调用timer函数  Linux中使用这个  (定时器回调函数若执行时间过长,会阻碍其他定时器函数执行)

2,freeRTOS中

一般定时器守护函数设置优先级比较高

使用定时器的话,需要定义宏(守护任务的优先级、队列的长度、栈的深度)

队列的作用:在守护任务中执行timer函数

别的任务(用户程序)设置timer,通过队列发消息来实现,唤醒右下方的守护任务

定时器状态=  休眠-运行

创建定时器-启动定时器,定时器到点就工作(优先级高会抢占其他任务),可看作是独立于业务逻辑的一套,

使用定时器去除抖动:

抖动的话会进入中断,中断函数里面初始化定时器(没有超过定时器周期),抖动过程中会一直初始化定时器直到状态稳定后,定时器周期结束,计次+1

中断管理

区别:

ISR(Interrupt Service Routine)的函数不能阻塞,没有对应的等待时间,队列没满会进入,会唤醒等待队列的任务A,但不调度,只记录需要发起调度,队列满的话直接报错;为什么不在_ISR那种函数中调用呢?因为没有意义

若是在上图中的。。。_ISR函数中,FOR循环多次调度,会调度不成功,因为优先级永远中断的比较高,所以for循环就浪费了时间,不如等到循环结束后,一次性的读取对应的标志位来触发是否进行调度(不是立刻调度),【是设置了一个优先级比较低的中断B,等到当前的正式中断执行完毕后,再执行B中断,在其中执行真正的调度】

没有ISR后缀的函数,写队列后会唤醒等待队列的任务A,若A的优先级更高的话,会发起调度(先运行A?); 队列满的话可以即可返回和进行阻塞(直接调度)

资源管理

解决的问题:多个任务使用同一通道的时候,同一时间互斥访问

禁止任务调度,暂停任务调度器,使用一个函数即可

恢复函数后,会先检查有没有更高优先级的任务,有的话就先调度执行它

屏蔽中断(优先级比较低的那一’段位‘所有的中断,数值越低,优先级越高)

对于具体的芯片,优先级可能没有256那么多,这数值到时会以线性映射

在中断中屏蔽中断会记录当前时刻中断的状态,屏蔽解除后,回复其之前的状态

6 定时器 &中断管理&资源管理的更多相关文章

  1. STM32学习笔记——定时器中断(向原子哥学习)

    定时器中断 STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器.在本章中,我们将利 ...

  2. STM32-NVIC中断管理实现[直接操作寄存器]

    源:stm32 NVIC中断管理实现[直接操作寄存器]     cortex-m3支持256个中端,其中包含了16个内核中断,240个外部中断.stm32只有84个中断,包括16个内核中断和68个可屏 ...

  3. Linux中断管理 (2)软中断和tasklet

    目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管 ...

  4. 嵌入式02 STM32 实验10 定时器中断

    优秀文章 https://blog.csdn.net/qq_38351824/article/details/82619734 一.STM32通用定时器(TIM2.TIM3.TIM4和TIM5共四个通 ...

  5. 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置

    灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...

  6. (stm32f103学习总结)—stm32定时器中断

    一.定时器介绍 STM32F1的定时器非常多,由2个基本定时器(TIM6.TIM7).4个通 用定时器(TIM2-TIM5)和2个高级定时器(TIM1.TIM8)组成.基本定 时器的功能最为简单,类似 ...

  7. 4-MSP430定时器_定时器中断

    一开始没写好就上传了,,,,,,,,这次来个全的 自己学MSP430是为了写一篇关于PID的文章,需要430在proteus上做仿真,一则认为在自动控制算法上PID真的很经典,PLC设备上大多是模块式 ...

  8. stm32定时器中断类型分析

    一直在用的stm32定时器的中断都是TIM_IT_Update更新中断,也没问为什么,直到碰到有人使用TIM_IT_CC1中断,才想到这定时器的中断类型究竟有什么区别,都怪当时学习stm32的时候不够 ...

  9. STM32中断管理函数

    CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256 级的可编程中断设置.但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分. STM32 ...

  10. 提升效率(时间准确性),减少时间和资源的消耗——由89C52/89C51的定时器中断引出的一些问题

    尽量用最少的文字描述清楚问题. 事情起因是这样的: 要做遥控小车的平台迁移,STM32开发板无法方便地供电,因此又拿出了尘封的51(STC89C52RC),搭配上最小系统板就可以用排针加杜邦线供电了. ...

随机推荐

  1. 【Java】先return还是先finally

    之前调试只发现有的方法执行完return语句后再执行finally,但是没有细究 最近debug代码的时候发现,不同返回类型的方法,return和finally执行顺序竟然不一样 先看返回类型为voi ...

  2. 1.6 编写双管道ShellCode

    本文将介绍如何将CMD绑定到双向管道上,这是一种常用的黑客反弹技巧,可以让用户在命令行界面下与其他程序进行交互,我们将从创建管道.启动进程.传输数据等方面对这个功能进行详细讲解.此外,本文还将通过使用 ...

  3. SUM和IF使用求部分和

    GROUP BY可以按照某一列的不同值进行分组,然后将不同组的数据可以利用聚合函数进行汇总取值. --我们可以在老师表里面求解不同班级的老师分别有多少名 SELECT class_id,COUNT(t ...

  4. 零基础入门学习Java课堂笔记 ——day06

    面向对象(中) 1.封装 "高内聚,低耦合" 高内聚:类内部的细节自己完成,不允许外部干涉 低耦合:仅暴露少量方法给外部使用 属性私有 在Java中可以通过private关键字给方 ...

  5. BoolToStr、TBooleanHelper、Boolean 转 字符串

    方法1:直接使用 BoolToStr procedure TForm3.btn1Click(Sender: TObject); var a, b: Boolean; begin a := True; ...

  6. Linux 将命令的输出保存到文件

    当你在 Linux 终端中运行命令或脚本时,它会在终端中打印输出方便你立即查看.方法 1:使用重定向将命令输出保存到文件中你可以在 Linux 中使用重定向来达成目的.使用重定向操作符,它会将输出保存 ...

  7. ASCII编码的诞生:解决字符标准化与跨平台通信的需求

    在计算机的发展过程中,字符的表示和传输一直是一个重要的问题.为了实现字符的标准化和跨平台通信,ASCII(American Standard Code for Information Intercha ...

  8. JS Leetcode 278. 第一个错误的版本 题解分析

    壹 ❀ 引 本题来自LeetCode的278. 第一个错误的版本,难度简单,端午节就应该做点容易的题目缓解心情,题目描述如下: 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新 ...

  9. NC14704 美味菜肴

    题目链接 题目 题目描述 小明是个大厨,早上起来他开始一天的工作.他所在的餐厅每天早上都会买好 \(n\) 件食材(每种食材的数量可以视为无限),小明从到达餐厅开始就连续工作 \(T\) 时间.每道菜 ...

  10. java 从零开始手写 RPC (06) reflect 反射实现通用调用之客户端

    通用调用 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何 ...