内存管理分静态内存管理和动态内存管理(根据大小又分2种)

静态内存管理:创建、删除、初始化、解绑、申请和释放。初始化内存池是属于静态内存管理,与创建内存池不同的是,此处内存池对象所使用的内存空间是由用户指定的一个缓冲区空间,用户把缓冲区的指针传递给内存池对象控制块,其余的初始化工作与创建内存池相同。

动态内存:在堆heap上分配。

小堆内存管理模块主要针对系统资源比较少(小于2M内存空间的系统):内存池中有不同的内存块,申请时先查找找到符合要求的(拆分),释放时如果紧邻的空闲则合并成一个。

而SLAB内存管理模块则主要是在系统资源比较丰富时。这两种管理模块提供的API接口完全相同。分配、重新调整分配、释放,以及分配和释放的钩子函数。

警告:因为动态内存管理器要满足多线程情况下的安全分配,会考虑多线程间的互斥问题,所以请不要在中断服务例程中分配或释放动态内存块。因为它可能会引起当前上下文被挂起等待。

RTT对中断管理:专门为中断设置中断栈空间,在进入和退出时实现切换。中断的前半段(取得数据和状态并给线程同步信息)和后半段(线程对数据的进一步处理)

相关的中断操作函数:中断挂载、某个中断源的屏蔽和解开屏蔽,总中断的打开和关闭,此外进入和退出中断有专门的2个函数提示系统进入和退出了中断:

void rt_interrupt_enter(void);//如果中断服务程序不会调用内核相关的函数(释放信号量等操作)则不调用;否则调用的作用是
void rt_interrupt_leave(void);//推出时告诉内核该采取中断中线程切换的策略,而不是立即进行切换
rt_uint8_t rt_interrupt_get_nest(void)//是否发生了中断嵌套。
ARM Cortex-M系列处理器在从线程发生中断或者在中断时发生更高级级别的中断嵌套,PSR R0~R3,R12的现场保护都是由硬件自动完成的。每个中断都直接有一个确定的入口而不像ARM7/9先从统一的入口进去后在查找具体中断口。
中断方式还是轮询:比如串口发送,如果每次发送的量比较少(或波特率很高)此时轮询效率最高,中断时因为有任务切换开销效率不高,在OS下用中断方式要么将每次发送的数据量尽可能大,线程的优先级设置为最低(防止一直运行其它低优先级线程得不到运行机会)
一般在中断中发送信号量或者消息队列给线程。线程收到信号量或消息队列时进行处理。

中断处理:

  中断的栈采用独立于线程栈的方式,和主堆栈MSP(第一个线程或中断、异常时用)、线程栈LSP(线程切换时)对应。

低半步处理:中断应该短小精悍,在获得必要的异步硬件信号之后通过信号量、邮箱、队列等形式通知等待的线程做后半段处理、

RT-Thread 中断管理接口

如果中断服务程序不会调用内核相关的函数(释放信号量等操作),这个时候,也可以不调用 rt_interrupt_enter/leave() 函数

轮询还是中断:

1 优先中断:对于DMA/FIFI,存在高低速度问题时采用中断模式;

2轮询模式:但当数据传输速度非常快,传输数据量非常小时应采用轮询方式,(不然协通切换损耗比较大),但为了避免轮询导致长时间其它线程得不到运行,可以考虑将本线程的优先级降低一些。

RTT之内存管理及异常中断的更多相关文章

  1. 源码解读·RT-Thread小内存管理算法分析

    这篇文章最初发布在RT-Thread官方论坛中,最近准备整理放到博客中来让更多人一起探讨学习. 2012年9月28日星期五 前言: 母语能力有限 概述: 这篇文字和大家分享一下今晚对RT-Thread ...

  2. JVM自动内存管理-Java内存区域与内存溢出异常

    摘要: JVM内存的划分,导致内存溢出异常的可能区域. 1. JVM运行时内存区域 JVM在执行Java程序的过程中会把它所管理的内存划分为以下几个区域: 1.1 程序计数器 程序计数器是一块较小的内 ...

  3. Java自动内存管理机制学习(一):Java内存区域与内存溢出异常

    备注:本文引用自<深入理解Java虚拟机第二版> 2.1 运行时数据区域 Java虚拟机在执行Java程序的过程中把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创 ...

  4. 2.1 自动内存管理机制--Java内存区域与内存溢出异常

    自动内存管理机制 第二章.Java内存区域与内存溢出异常 [虚拟机中内存如何划分,以及哪部分区域.什么样代码和操作会导致内存溢出.各区域内存溢出的原因] 一.运行时数据区域 Java虚拟机所管理的内存 ...

  5. Android异常与性能优化相关面试问题-内存管理面试问题详解

    内存管理机制概述: 分配机制:操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能够正常的运行,不至于内存不够使用,或者某个进程占用过多的内存. 回收机制:在系统内存不足的时候,系统有一 ...

  6. 内存管理单元(MMU)和协处理器CP15介绍(转)

    内存管理单元(MMU)和协处理器CP15介绍内存管理单元(MMU)介绍嵌入式系统中,存储系统差别很大,可包含多种类型的存储器件,如FLASH,SRAM,SDRAM,ROM等,这些不同类型的存储器件速度 ...

  7. 程序员必读:Linux内存管理剖析

    现在的服务器大部分都是运行在Linux上面的,所以作为一个程序员有必要简单地了解一下系统是如何运行的. 对于内存部分需要知道: 地址映射 内存管理的方式 缺页异常 先来看一些基本的知识,在进程看来,内 ...

  8. Linux内核内存管理

    <Linux内核设计与实现>读书笔记(十二)- 内存管理   内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决). 所有内核 ...

  9. 《Linux内核设计与实现》读书笔记(十二)- 内存管理【转】

    转自:http://www.cnblogs.com/wang_yb/archive/2013/05/23/3095907.html 内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己 ...

随机推荐

  1. 《Maven实战》笔记-6-maven测试

    一.基于Maven的测试 1.maven-surefire-plugin插件 该插件的test目标会自动执行测试源码路径(默认src/test/java)下符合以下命名模式的测试类: 以Test开头或 ...

  2. [转]MYSQL5.7版本sql_mode=only_full_group_by问题

    转至:https://www.cnblogs.com/zhi-leaf/p/5998820.html 具体出错提示: [Err] 1055 - Expression #1 of ORDER BY cl ...

  3. 具有增删改查功能的表格Demo--【BootStrap】

    http://blog.csdn.net/wangmei4968/article/details/48437175

  4. HTTP 协议 -- 浏览器缓存机制

    浏览器缓存机制 浏览器缓存机制主要是 HTTP 协议定义的缓存机制. HTTP 协议中有关缓存的缓存信息头的关键字有 Cache-Control,Pragma,Expires,Last-Modifie ...

  5. HeadFirst设计模式中的笔记

    1.『策略模式』 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. OO基础:抽象 封装 多态 继承 OO原则:封装变化 多用组合,小用继承   针对接口编 ...

  6. P4196 [CQOI2006]凸多边形 半平面交

    \(\color{#0066ff}{题目描述}\) 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. \(\color{#0066f ...

  7. P2264 情书 Trie匹配

    \(\color{#0066ff}{题目描述}\) 为了帮助CYY,我们定义一个量化情书好坏的标准感动值.判断感动值的方法如下: 1.在情书的一句话中若含有给定词汇列表中的特定单词,则感动值加1,但每 ...

  8. peaks

    给定一个无向图,点有点权边有边权 Q次询问,每次询问从点v开始只经过边权<=x的边能到达所有点中点权第k大值,无解输出-1 N<=1e5,M,Q<=5e5 建立大根kruskal重构 ...

  9. 【三支火把】--- 关于UEFI&PCD的总结介绍

    1个人理解 个人理解PCD基本等同于Token,应当算是一种描述性语言,按照规定书写好PCD的配置档,在编译的过程中,会根据你的配置生成同等含义的C文档,而在C文档中对应会出现相应的define或者变 ...

  10. java8 optional操作

    目标:测试option的过滤,链式操作: 代码: package test; import java.util.ArrayList; import java.util.Arrays; import j ...