Cstyle的札记,Freertos内核详解,基于cortex-m3,第0篇

Freertos是一个硬实时内核,支持众多的微处理器架构,我们可以从它的官网(www.freertos.ort)下载它的sourcecode,同时也可以看出它支持了几十种的微处理器架构,这些就不罗嗦了。之所以选择研究这个,是应为窥探RTOS内核的内幕一直每一个做底层软件开发人员的心愿,选择过好几种RTOS但他们有的是需要收费,有的不太成熟也不够系统,有的虽然比较成熟但是系统太大不太适合研究。而freertos就不同了,它除了包含RTOS所需要的基本的东西之外最大的特点就是开源+简单并且支持了非常多的MCU,并且提供了众多的demo供我们来参考,它的核心内涵只有3个文件,其他的功能可以通过一些plus来逐渐丰富其内核的功能。

Freertos目前最新的版本是8.0.1从其官网下载下来之后我们就可以逐渐来分析其内核的实现了。这里首先从目录结构开始。

+-FreeRTOS-Plus    Contains Freertos+ components and demo projects.
+-FreeRTOS         Contains the FreeRTOS real time kernel sourcefiles and demo projects
    +-Demo      Contains the demo application projects.
        +-Common    The demo application files that are used by all the demos.
        +-Dir x     The demo application build files for port x
        +-Dir y     The demo application build files for port y

+-Source Contains the real time kernel source code.

        +-include   The core FreeRTOS kernel header files
        |
        +-Portable  Processor specific code.
            |
            +-Compiler x    All the ports supported for compiler x
            +-Compiler y    All the ports supported for compiler y
            +-MemMang       The sample heap implementations
    内核的目录结构如上,我们可看到它结构非常分明把内核的核心代码跟processor硬件相关的部分合理的分开,这样我们就能很容易把Freertos移植到其他的硬件平台上去了,我们是基于atmel公司arm cortex-m3内核的MCU AT91SAM3X/A来仔细研究其内核的架构和实现。它的代码在FreeRTOSv8.0.1\FreeRTOS\Demo\CORTEX_ATSAM3X_Atmel_Studio目录下,我们双击project根目录下的批处理他就能自动把需要的代码拷贝到我们的project根目录下的相关目录下,然后使用SI来建立工程读代码了,或者使用Ateml官方提供的ateml studio工具来打开工程文件来编译工程,但是要注意的是它编译的时候会报一个错误,这个是正常的,只是一个善意的提醒,我们注释掉报错的地方就行了。
    乍一看,似乎内核代码很多,其实真正必须的最小的系统需要的文件很少,必备的文件如下:
1.tasks.cqueue.c and list.c 必须的
2. timers.c  implement software timer  可选
3. andcroutine.c  implement  co-routine functionality 可选
4. heap_x.c  必须,MemMang目录下面的文件,提供了内存管理的功能,建议用户自己实现,同时内核提供了3个参考方案,客户可以使用我们的开发工具里面自带的mollac库或者自己实现。
5.针对我们选择的MCU这里还需要有其他的一些HW相关的东西,比如CMSIS针对某个特定的开发工具的相关配置文件,如makfile,配置文件等。支持几乎我们知道的所有的开发工具:IAR,MDK,GCC等。

转载请注明出处

[email protected]  //  http://blog.csdn.net/CStyle_0x007

Cstyle的札记,Freertos内核详解,基于cortex-m3,第0篇

时间: 2024-10-12 22:48:42

Cstyle的札记,Freertos内核详解,基于cortex-m3,第0篇的相关文章

Cstyle的札记,Freertos内核详解,第2篇

<span style="white-space:pre"> </span>RTOS里面最常见也最核心的数据结构,双向链表实现. VS 2008下可编译测试. <pre name="code" class="cpp">/** @file Copyright (c) 2008 - 2014, MX.Studio All rights reserved. Created by Cstyle **/ #ifndef

Cstyle的札记,Freertos内核详解,第3篇

<span style="white-space:pre"> </span>RTOS里面最常见的以及最核心的数据结构,队列的实现.可在VS2008 下编译测试. /** @file Copyright (c) 2008 - 2014, MX.Studio All rights reserved. Created by Cstyle **/ #ifndef _QUEUE_H_ #define _QUEUE_H_ #ifdef __cplusplus extern

Cstyle的札记,Freertos内核详解,第1篇

一种动态内存管理Malloc/Free服务的链表实现 , 动态内存分配与回收服务,Malloc/Free的实现,最主要的核心内容是单向链表.其数据结构定义如下,一整段内存被SRAM或SDRAM,DRAM由系统的内存管理模块统一管理,这里主要是堆的管理: typedef struct A_BLOCK_LINK { struct A_BLOCK_LINK  *pxNextFreeBlock;     /*<< The next free block in the list. */ size_t x

jQuery内核详解与实践读书笔记1:原型技术分解2

上一篇已经搭建了一个非常简陋的jQuery框架雏形,如没有阅读搭建过程,请先阅读<jQuery内核详解与实践读书笔记1:原型技术分解1>初始搭建过程.接下来,完成书中介绍的剩下三个步骤: 7. 延续--功能扩展 jQuery框架是通过extend()函数来扩展功能的,extend()函数的功能实现起来也很简单,它只是吧指定对象的方法复制给jQuery对象或jQuery.prototype对象,如下示例代码就为jQuery类和原型定义了一个扩展功能的函数extend(). 1 var $ = j

jQuery内核详解与实践读书笔记1:原型技术分解1

一直以来都有研究一下jQuery源代码的想法,但是每次看到jQuery几千行的代码,头就大了,没有一点头绪,也不知道从哪里开始.昨天去图书馆无意间发现了这本<jQuery内核详解和实践>,翻看了一下里面的内容,这正是我寻觅多时剖析jQuery源码的好书. 废话不多说,直入正题吧.第一章介绍了一下jQuery的起步和一些历史故事,没什么重要内容.这里直接进入第二章,jQuery技术解密,从这一章开始就全部是干货了.这一章主要分四部分:jQuery原型技术分解,破解jQuery选择器接口,解析jQ

HashMap实现详解 基于JDK1.8

HashMap实现详解 基于JDK1.8 1.数据结构 散列表:是一种根据关键码值(Key value)而直接进行访问的数据结构.采用链地址法处理冲突. HashMap采用Node<K,V>数组作为散列表来存储数据.源码声明如下: /** * The table, initialized on first use, and resized as * necessary. When allocated, length is always a power of two. * (We also to

iOS动画详解(学习动画看这一篇就够了)

iOS动画详解(学习动画看这一篇就够了) 一.基础知识 CAAnimation.png 二.CABasicAnimation 1. 动画的属性和解释 2.属性值的解释 repeatCount : 如果在swift中需要一直不断重复:Float.infinity,OC:HUGE_VALF timingFunction: timingFunction.png kCAMediaTimingFunctionLinear--在整个动画时间内动画都是以一个相同的速度来改变.也就是匀速运动.一个线性的计时函数

【three.js详解之二】渲染器篇

[three.js详解之二]渲染器篇 本篇文章将详细讲解three.js中渲染器(renderer)的设置方法. three.js文档中渲染器的分支如下: Renderers CanvasRenderer DOMRenderer SVGRenderer WebGLRenderer WebGLRenderTarget WebGLRenderTargetCube WebGLShaders 可以看到three.js提供了很多的渲染方式,我们选择的当然是WebGLRenderer,但我们这里要将Canv

详解linux运维工程师高级篇(大数据安全方向)

详解linux运维工程师高级篇(大数据安全方向) hadoop安全目录: kerberos(已发布) elasticsearch knox oozie ranger apache sentry 简介: 从运维青铜到运维白银再到运维黄金,这里就要牵扯到方向问题也就是装备,根据自己的爱好,每个人都应该选择一个适合自己和喜欢自己的一个职业技术方向,如:大数据安全,开发运维,云计算运维等等.而掌握的越多前言技术也就是更多的装备,才能更好的在it行业混下去,毕竟it技术更新太快,初级篇和中级篇前面已介绍.