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硬件相关的部分合理的分开,这样我们就能非常easy把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等。

转载请注明出处

最新文章

  1. K-Means聚类算法原理
  2. DSP using MATLAB 示例 Example3.11
  3. 配置Linux自动挂载
  4. 支持 Firefox、Chrome 等主流浏览器的全站变灰 CSS 代码
  5. 发送WIN+SAPCE键,WINDOWS,空格键
  6. IOS中利用宏将RGB值转换为UIColor(转)
  7. ISO14443协议中,卡片对RATS,PPS,IBLOCK的处理约定
  8. java交通灯管理系统项目
  9. hdu 4502 吉哥系列故事——临时工计划_简单dp
  10. block 解析 - 成员变量
  11. php连接oracle及简单操作
  12. 快速排序的C语言实现
  13. for语句输出三角形
  14. Java 关于路径
  15. UVa1635 - Irrelevant Elements
  16. SpringMVC 返回json的两种方式
  17. 当使用cokie进行数据交互时候,cookie只需存储该对象的id即可不需要存放其他数据;只需在写个接口根据cookie里面的对象id来创建对象
  18. BZOJ4039 : 集会
  19. HTTP/1.1 100 Continue - I 服了 You
  20. 一组十六进制的字符串每两个转成对应值的byte

热门文章

  1. FTL(Flash translation layer)闪存转换层
  2. Delphi XE的RTTI增强,动态Hook某些内部事件
  3. 使用Fiddler解析WCF RIA Service传输的数据
  4. java多线程同步
  5. dataguard dubugs
  6. 【从零学习Python】Ubuntu14.10下Python开发环境配置
  7. Java中布尔类型操作符&=,|=与^=的使用
  8. 委托与Lambda表达式
  9. C/C++修改常量的值
  10. ASP.NET产生随机验证码