请稍侯

异常(同步中断)和中断(异步中断)

  中断和异常到底有什么区别?看到的一些书上经常将这两个词混着使用,最近在查阅《ARM Cortex-M3 权威指南》时看到一段小字给出了答案,果断摘录下来:所有能打断正常执行流的事件都称为异常。如果非得分个丁一卯二,则中断与异常的区别在于,那240个中断对CM3核来说都是“意外突发事件”——...

MQX机制分析——动态内存管理

1 默认内存管理函数的不足   我们知道c/c++普通的内存管理需要我们可以通过malloc/free和new/delete实现,在利用默认的这些内存管理函数在堆上分配和释放内存时会有一些额外的开销。系统在接收到分配一定大小内存的请求时,首先查找内部维护的内存空闲块表,并且需要根据一定的...

MQX机制分析——调度机制

  多任务运行时,那么任务切换的时候就不可避免的要碰到任务调度这个问题了,这是操作系统的一个核心部分, 一般来说,调度和中断是有关联的,代码都是用汇编编写,MQX中也一样,与调度相关的代码在dispatch.s中可以找到。   在讲调度之前,首先我们要介绍两个中断:系统服务调用(S...

MQX机制分析——任务管理机制

  使用操作系统的目的之一就是为了多任务运行,那么任务到底是什么?这一节会简单介绍MQX中的任务。   任务是指在任务模板中注册的完成一定功能的函数,但是并不是所有的函数都可以被称为任务,任务有自己的特点,MQX的任务由三个部分组成:任务函数、任务堆栈、任务描述符。任务函数就是任务要完成具体功...

MQX机制分析——中断机制(三)

  这一节聊一聊宏观上中断发生时所做的一些操作流程,如寄存器的入栈出栈情况,堆栈的切换以及PC是如何改变的等等。首先看下任务被中断打断的情况下是如何响应的:   (1)有中断请求时,中断控制器NVIC获取中断源硬件设备的中断向量号,并通过识别的中断向量号将对应硬件中断源模块的中断状态寄存器中...

MQX机制分析——中断机制(二)

  之前介绍了MQX中断机制的主要特点以及向量表的特别之处,这一节具体分析一些细节。 中断优先级   首先简单介绍下Cortex M4的优先级的异常响应,Cortex M4支持最多255个中断(0代表没有异常在运行),其中中断号1-15对应系统异常,中断号16到255为外部中断(这里的中断...

MQX机制分析——中断机制(一)

MQX中断机制特点   MQX的中断机制相对来说比较复杂,采用了随时注册随时使用的机制。MQX的中断机制有如下几个特点:   (1)使用了静态中断向量表和稀疏向量表二张中断向量表;   (2)采用了内核ISR和用户ISR的分解处理机制;   (3)通过内核ISR把两张中断向量表联系在...

MQX机制分析——启动流程

1 启动代码在哪儿   接着上一个hello world的工程,我们点开hello_twrk60n512工程中的hello.c,发现并没有我们平时所看到的的裸奔程序不太一样,怎么连个main函数都找不到,更别说系统启动代码了,不要急,首先我们先要找到链接文件。链接文件就是用来指明链接各个目标...

MQX机制分析——介绍

  最近一段时间一直在看MQX的代码,抽空把一些笔记整理记录下来。接下来一个系列的文章会基于MQX 4.0.2这个版本的源码从启动,时间管理,任务调度,中断管理,任务同步以及内存管理这几个部分进行分析。 简介   MQX的缩写是Message Queue eXecutive,意为消息队...

pip下载超时的解决办法

  使用pip安装包的时候经常会出现超时安装不了的情况,搜了下有两种方法可以解决: 1 指定源地址 使用-i参数指定url,例如: pip install flask -i http://pypi.v2ex.com/simple 2 修改配置文件 ~/.pip/文件夹下如果没有配置...